首页 > 编程语言 > 详细

快速排序的三种实现方式

时间:2017-07-09 13:14:00      阅读:259      评论:0      收藏:0      [点我收藏+]

 

实现时都是分治+递归的思路.

 

第一种 是 i 、j 找到的元素互换法,    如基准是第一个元素,那么j从后往前找比基准小的元素, 找到后接着让i从前往后找比基准大的元素,找到后让i j位置处的元素互换位置, 接着j再从后往前找比基准小的元素,直到 i == j  然后将相等位置处的元素和基准位置处的元素互换,至此完成一轮排序.

注意如果基准是第一个元素,那么一定要先从后往前扫描,因为这样才能保证i j 相等位置处的元素一定小于基准位置处的元素

一轮排序结束后返回 当前i 或j的值用于递归.

这种方法详细请参见:http://developer.51cto.com/art/201403/430986.htm

 

 

第二种是挖坑填数法,如基准是第一个元素,因为被一个变量记录了,那么可以看成第一个位置处的元素已经被挖出,有了一个坑, 此时j从最后一个元素处开始找比基准小的元素,

找到后就把那个元素的值赋给第一个位置处,可以看成第一个位置处的坑被填上了, 但是找到的那个元素的位置处又有了一个新坑,紧接着就是i++找比基准大的元素,不断挖新坑补上一个旧坑,然后直到i == j  把基准的值(有一个变量记录住了)补到这个有坑的位置上(这个位置的值赋给了上一个旧坑)   至此一轮排序结束.

这种方法详细请参见:http://blog.csdn.net/morewindows/article/details/6684558

 

 

第三种是不断和基准换位置法,这种和第二种类似,只是交换的次数更多,效率更低,原理就是如基准是第一个元素,那么j找到的元素和基准换位置,然后i找到的元素还是和基准当前所在位置互换,直到i ==j . 结束一轮排序

这种方法是每次找到符合的元素要执行2次赋值操作,而挖坑填数法除了最后一次执行了2次赋值操作,其它每次都是执行一次赋值操作.即把新坑的值赋给旧坑.

这种方法详细请参见:https://jingyan.baidu.com/article/d45ad148905ccf69552b80d9.html

 

 

暂时先写个原理思路,以后有机会再补上助于理解的图片和实现代码.

 

快速排序的三种实现方式

原文:http://www.cnblogs.com/hczd123/p/7141181.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!