快速排序法
这个排序方法的时间复杂度为O(nlogn),最坏时间复杂度为O(n^2),所以说是属于所有排序方法中比较高效率的一种了。
这种排序方法的基本思想是:
先找到一个区间中的一个基准点,然后找到这个区间右边所有小于这个基准点的元素都放到基准点左边,还有这个区间左边所有左边大于这个基准点的元素都放到基准点右边。用递归思想,将区间化小,一直小到只有一个元素即排序完成。
百度百科这么说的:快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
该思想的实现代码写出来可能不一样,但是思想大概就是这个思想。
下面是我搜集到的一个人写的快速排序的代码:
1 void partition(int a[], int start,int end) 2 { 3 if(start>=end) 4 return; 5 6 int low = start; 7 int heigh = end; 8 int index = a[low]; // 基准点选在区间开头的元素 9 10 while(low<heigh) 11 { 12 while(a[heigh]>index&&low<heigh) // 从区间右侧开始,找到比基准点index小的元素就放到区间左边 13 { 14 heigh--; 15 } 16 if(low<heigh) 17 { 18 a[low++] = a[heigh]; 19 } 20 while(a[low]<index&&low<heigh) // 从区间左边开始,找到比基准点index大的元素就放到区间右边 21 { 22 low++; 23 } 24 if(low<heigh) 25 { 26 a[heigh--] = a[low]; 27 } 28 } 29 30 a[low] = index; // 把基准点放到区间中间 31 partition(a,start,low-1); // 把基准点左侧的区间进行整理----递归 32 partition(a,low+1,end); // 把基准点右侧的区间进行整理----递归 33 }
下面是调用示例:
int a[] = {1,3,5,4,3,0,8,6}; partition(a,0,7);
运行结果:
参考文章:
分类:
IT-算法设计-ACM
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?