推广 热搜: 可以  搜索引擎  page  企业  百度  个数  使用  选择  音视频  行业 

【苏瞳】C语言+三种快速排序+ 三数取中法优化快排

   日期:2024-12-21     移动:http://ww.kub2b.com/mobile/quote/8594.html

目录

1.挖坑法

2.左右指针法

3.前后指针法

4.快排优化 -- 三数取中法


快速排序毋庸置疑是最快的排序要不对不起它这个名字,哈哈。

这里都以升序为例子。

一般都是取第一个做pivot,key=arr[pivot],思想就是使key左边都比key小,右边都比key大。

[left,pivot-1]   pivot   [pivot+1,right]

然后再递归分治arr数组中的左边和右边直到只有一个数字。

单趟排序如下图

整体代码如下,注释详细

注意循环里面的循环条件不要忘记 bagin < end ,不然可能会越界。

同样 while里面的找小条件要arr[end] >= key 这里一定要>=否则可能会死循环。

找大同理。

【苏瞳】C语言+三种快速排序+ 三数取中法优化快排

 


思想完全和第一种一样,就是这种找比key大或小是用左右两个指针完成的。

整体代码如下,注释详细

 

这种实现和上面两种略有不同。

还是取第一个值的下标作keyi,利用前面两个指针 prev cur

cur找小,每次遇到比keyi小的值就停下来,prev++,交换prev和cur位置的值

如下图

整体代码如下,注释详细

 


众所周知,快速排序的时间复杂度为O(N*logN)

什么时候最坏呢

当然是每次取的key恰好是最大值或者最小值,即数组已经有序,这时的时间复杂度就是O(N^2)

大致如下图

为了避免这种情况可以,让key取尽量中间值即三数取中法。

整体代码如下,注释详细

下面是对挖坑法优化,其他方法优化一样,调用一下GetMidIndex函数就行了

 

本文地址:http://ww.kub2b.com/quote/8594.html     企库往 http://ww.kub2b.com/ ,  查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关最新动态
推荐最新动态
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号