排序 -- 万能测试oj

. - 力扣(LeetCode)

 

这道题我们可以使用我们学过的那些常见的排序方法来进行解答 

//插入排序
void InsertSort(int* nums, int n)
{for (int i = 0; i < n-1; i++){int end = i;int tmp = nums[end + 1];while (end >= 0){if (tmp < nums[end]){nums[end + 1] = nums[end];}else{break;}}end--;}
}//希尔
void ShellSort(int* nums, int numsSize) 
{int gap = numsSize;while(gap > 1){gap = gap/2;for(int i =0; i < numsSize - gap; i++){int end = i;int tmp = nums[end+gap];while(end >= 0){if(tmp < nums[end]){nums[end + gap] = nums[end];end -= gap;}else{break;}}nums[end+gap] = tmp;}}
}void Swap(int* a ,int* b)
{int tmp = *a;*a = *b;*b = tmp;
}//选择排序
void SelectSort(int* nums, int n)
{int left = 0;int right = n-1;while(left < right){int maxi = left, mini = left;for(int i=left+1; i<=right; i++){if(nums[i] > nums[maxi]){maxi = i;}if(nums[i] < nums[mini]){mini = i;}}Swap(&nums[left], &nums[mini]);if(maxi == left){maxi = mini;}Swap(&nums[right], &nums[maxi]);++left;--right;}
}int GetMidi(int* nums, int left, int right)
{int midi = (left + right) / 2;if(nums[left] < nums[midi]){if(nums[midi] < nums[right]){return midi;}else if(nums[left] < nums[right]){return right;}else{return left;}}else{if(nums[midi] > nums[right]){return midi;}else if(nums[left] < nums[right]){return left; }else{return right;}}
}int PartSort(int* nums, int left, int right)
{int midi = GetMidi(nums, left, right);Swap(&nums[midi], &nums[left]);int keyi = left;while(left < right){while(left < right && nums[right] >= nums[keyi]){right--;}while(left < right && nums[left] <= nums[keyi]){left++;}Swap(&nums[left],&nums[right]);}Swap(&nums[keyi],&nums[left]);return left;// int keyi = left;// int prev = keyi;// int cur = prev+1;// while(cur <= right)// {//     if(nums[cur] < nums[keyi] && ++prev != cur)//     {//         Swap(&nums[prev],&nums[cur]);//     }//     ++cur;// }// Swap(&nums[prev],&nums[keyi]);// return prev;
}//快速排序
void QuickSort(int* nums, int begin, int end)
{if(begin >= end){return;}// if((end - begin + 1) > 10)// {//     int keyi = PartSort(nums, begin, end);//     QuickSort(nums, begin, keyi-1);//     QuickSort(nums, keyi+1, end);// }// else// {//     InsertSort(nums + begin, end - begin + 1);// }int keyi = PartSort(nums, begin, end);QuickSort(nums, begin, keyi-1);QuickSort(nums, keyi+1, end);
}void _MergeSort(int* nums, int* tmp, int begin, int end)
{if(end <= begin){return;}int mid = (begin + end) / 2;_MergeSort(nums, tmp, begin, mid);_MergeSort(nums, tmp, mid+1, end);int begin1 = begin, end1 = mid;int begin2 = mid+1, end2 = end;int index = begin;while(begin1 <= end1 && begin2 <= end2){if(nums[begin1] < nums[begin2]){tmp[index++] = nums[begin1++];}else{tmp[index++] = nums[begin2++];}}while(begin1 <= end1){tmp[index++] = nums[begin1++];}while(begin2 <= end2){tmp[index++] = nums[begin2++];}memcpy(nums+begin, tmp+begin, sizeof(int)*(end-begin+1));
}//归并排序
void MergeSort(int* nums, int n)
{int* tmp = (int*)malloc(sizeof(int)*n);_MergeSort(nums, tmp, 0, n-1);free(tmp);}计数排序
void CountSort(int* nums, int n)
{int min = nums[0], max = nums[0];for(int i = 0; i<n;i++){if(nums[i] < min){min = nums[i];}if(nums[i] > max){max = nums[i];}}int range = max - min + 1;int* tmp = (int*)malloc(sizeof(int)*range);memset(tmp, 0, sizeof(int)*range);for(int i =0;i<n;i++){tmp[nums[i] - min]++; }int j = 0;for(int i =0;i<range;i++){while(tmp[i]--){nums[j++] = i + min;}}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/41620.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyVideoTrans:一款功能全面的视频翻译配音工具!【送源码】

PyVideoTrans是一款功能全面的视频翻译配音工具&#xff0c;专为视频内容创作者设计。它能够将视频中的语言翻译成另一种语言&#xff0c;并自动生成与之匹配的字幕和配音。支持多种语言&#xff0c;包括但不限于中文&#xff08;简繁体&#xff09;、英语、韩语、日语、俄语、…

Wormhole Filters: Caching Your Hash on Persistent Memory——泛读笔记

EuroSys 2024 Paper 论文阅读笔记整理 问题 近似成员关系查询&#xff08;AMQ&#xff09;数据结构可以高效地近似确定元素是否在集合中&#xff0c;例如Bloom滤波器[10]、cuckoo滤波器[23]、quotient滤波器[8]及其变体。但AMQ数据结构的内存消耗随着数据规模的增长而快速增长…

MSPM0G3507——串口0从数据线传输变为IO口传输

默认的跳线帽时这样的&#xff0c;这样时是数据线传输 需要改成这样&#xff0c;即可用IO口进行数据传输

windows系统本地端口被占用的问题

第一步&#xff1a;查找所有运行的端口 按住“WindowsR”组合键&#xff0c;打开命令窗口&#xff0c;输入【cmd】命令&#xff0c;回车。在弹出的窗口中输入 命令【netstat -ano】&#xff0c;再按一下回车键 Win系统端口被占用-查找所有运行的端口 第二步&#xff1a;查看…

opencv_C++学习笔记(入门30讲)

文章目录 1.配置开发环境2.图像读取与显示3.图像色彩空间转换4.图像对象的创建与赋值5.图像像素的读写操作6.图像像素的算数操作7.滚动条-调整图像亮度8.滚动条-调整对比度和亮度9.键盘响应操作10.图像像素的逻辑操作11.图像的通道分离和合并12.图像色彩空间转换13.图像的像素值…

阿里云存储的降本增效与运维

小浩负责公司存储架构层&#xff0c;需要确保存储层不会成为公司业务系统的性能瓶颈&#xff0c;让数据读写达到最佳性能。那么小浩可以从哪些方面着手优化性能呢&#xff1f;他继续求助系统架构师大雷。 小浩&#xff1a;雷哥&#xff0c;PD反馈公司系统最近响应很慢&#xff…

HTTP模块(一)

HTTP服务 本小节主要讲解HTTP服务如何创建服务&#xff0c;查看HTTP请求&响应报文&#xff0c;还有注意事项说明&#xff0c;另外讲解本地环境&Node环境&浏览器之间的链路图示&#xff0c;如何提取HTTP报文字符串&#xff0c;及报错信息查询。 创建HTTP服务端 c…

lspci

【原】Linux之PCIE三种空间解析 PCIe学习笔记——2.PCIe配置空间 PCIE学习&#xff08;2&#xff09;PCIE配置空间详解 开发者分享 | 使用 lspci 和 setpci 调试 PCIe 问题 b : 字节 w&#xff1a;word L&#xff1a; 4byte

LLM - 词表示和语言模型

一. 词的相似度表示 (1): 用一系列与该词相关的词来表示 (2): 把每个词表示一个独立的符号(one hot) (3): 利用该词上下文的词来表示该词 (3): 建立一个低维度的向量空间&#xff0c;用深度学习方法将该词映射到这个空间里(Word Embedding) 二&#xff1a;语言模型 (1): 根…

Redis源码整体结构

一 前言 Redis源码研究为什么先介绍整体结构呢?其实也很简单,作为程序员的,要想对一个项目有快速的认知,对项目整体目录结构有一个清晰认识,有助于我们更好的了解这个系统。 二 目录结构 Redis源码download到本地之后,对应结构如下: 从上面的截图可以看出,Redis源码一…

52-5 内网代理2 - LCX端口转发(不推荐使用LCX)

环境搭建: 本地开3台虚拟机:kali(必须)、windows2012与2008 (可换成其他windows虚拟机) kali - 网络配置成桥接模式 windows2012 - 设置两个网卡,NAT与桥接模式 注意:windows2012要关闭防火墙,要不然其他主机ping不通 关闭防火墙后再开启远程桌面连接 windwos20…

去O化神器 Exbase

随着去O化进程推动&#xff0c;很多旧业务依赖的oracle数据库&#xff0c;都需要实现做数据库的替换&#xff0c;当下能很好兼容Oracle&#xff0c;并实现异构数据库之间转换的工具并不多。这里给大家推荐一个商业工具数据库迁移工具exbase&#xff08;北京海量&#xff09;&am…

昇思MindSpore 25天学习打卡营|day18

DCGAN生成漫画头像 在下面的教程中&#xff0c;我们将通过示例代码说明DCGAN网络如何设置网络、优化器、如何计算损失函数以及如何初始化模型权重。在本教程中&#xff0c;使用的动漫头像数据集共有70,171张动漫头像图片&#xff0c;图片大小均为96*96。 GAN基础原理 这部分原…

想知道你的电脑能不能和如何升级RAM吗?这里有你想要的一些提示

考虑给你的电脑增加更多的RAM,但不确定从哪里开始?本指南涵盖了有关升级Windows PC或笔记本电脑中RAM的所有信息。 你需要升级RAM吗 在深入研究升级RAM的过程之前,评估是否需要升级是至关重要的。你是否经历过系统滞后、频繁的BSOD错误或应用程序和程序突然崩溃?这些症状…

从零开始的python学习生活

pycharm部分好用快捷键 变量名的定义 与之前学习过的语言有所不同的是&#xff0c;python中变量名的定义更加的简洁 such as 整形。浮点型和字符串的定义 money50 haha13.14 gaga"hello"字符串的定义依然是需要加上引号&#xff0c;也不需要写&#xff1b;了 字符…

【网站推荐】Developer Roadmaps 开发者学习路线

你是否想学习某门技术而苦苦找不到学习路线。本文推荐一个网站&#xff0c;解决学习路径问题。 roadmap.sh 旨在创建路线图、指南和其他教育内容&#xff0c;以帮助指导开发人员选择路径并指导他们的学习。 技术路线包括了前端后端安卓iosUI设计等内容&#xff0c;一些技术比如…

antdesignvue对话框用户可移动并缩放

原贴 轻松搞定Ant Design Modal对话框拖拽缩放 - ByteZoneX社区https://www.bytezonex.com/archives/IFRuoJhd.html Ant Design 模态对话框&#xff1a;实现拖拽缩放功能 **子 Ant Design 是一个流行的前端 UI 框架&#xff0c;提供了一系列实用的组件&#xff0c;包括模态对…

ESP32CAM物联网教学02

ESP32CAM物联网教学02 物联网门锁 小智来到姑姑家门口&#xff0c;按了门铃&#xff1b;还在公司上班的姑姑用电脑给小智开了门&#xff0c;让他先进屋休息。小智对物联网门锁产生了兴趣&#xff1a;什么是物联网&#xff1f;为什么这么厉害&#xff1f; 初识物联网 我们在百…

andboxie-Plus - 知名沙盒软件、支持游戏多开测试软件

我们经常会需要用到一些毒瘤软件——它们可能不是真正的恶意软件&#xff0c;但总爱偷摸干一些流氓行为。 工作中&#xff0c;有时还不得不安装使用一些来路不明、不能完全信任的可疑软件。 装上吧&#xff0c;心里膈应、难受&#xff1b;不装吧&#xff0c;有些工作又进行不…

【驱动篇】龙芯LS2K0300之PWM设备驱动

实验目的 利用脉冲调制效应&#xff08;PWM&#xff09;等效改变输出功率大小控制LED&#xff0c;从而实现呼吸灯效果&#xff0c;需要用到RGB LED模块 模块连接 IO 插针接口上一共集成了两路PWM&#xff0c;分别是PWM2和PWM3&#xff0c;对应GPIO88、GPIO89 PWM2和PWM3对…