分治法-----快速排序
来源:互联网 发布:类似淘宝的小购物网站 编辑:程序博客网 时间:2024/06/04 18:41
1.算法思想
将待排序列通过一趟扫描分割成独立的三个序列:第一个序列中的所有元素均小于基准元素,第二个序列是基准元素,第三个序列中的所有元素大于基准元素,由于第二序列已出于正确位置,按同样的方法对第一个序列和第三个序列分别进行排序,整个序列过程递归进行,最终实现整个序列有序
2.快速排序的分治法体现
利用分治法对快速排序的描述: 设待排序列为R[low:high],其中low<=high。用分治法分三步处理:
1.分解
在R[low:high]中选一个元素作为基准元素(pivot)该基准元素的位置(pivotpos)在划分的过程中确定,以此基准元素为标准将待排序列划分为两个子序列R[low,pivotpos-1]和R[pivotpos+1,high],并使序列R[low,pivotpos-1]中的所有元素均小于等于R[pivotpos],序列R[pivotpos+1,high]中的所有元素大于等于R[pivotpos],此时基准元素已位于正确位置
2.求解子问题
对两个子序列R[low,pivotpos-1]和R[pivotpos+1,high],分别进行递归调用快速排序算法进行排序
3.合并
3.划分方法
待排序列为R[low,high],以第一个元素为基准元素
步骤1:设两个参数i和j,它们的初值分别为待排序列的上界和下界,即i=low,j=high
步骤2:选取待排序列的第一个元素R[low]作为基准元素,并将该值赋给变量pivot
步骤3:令j自j位置开始向左扫描,如果j位置所对应的元素的值大于等于pivot。则j--,重复该过程,直到找到第一个小于pivot的元素R[j],将R[j]和R[i]进行交换,i++
步骤4:令i自i位置开始向右扫描,如果i位置所对应的元素的值小于等于pivot。则i++,重复该过程,直到找到第一个大于pivot的元素R[i],将R[j]和R[i]进行交换,j--
步骤5:重复步骤3和4,交替改变扫描方向,从两端各自往中间靠拢直至i=j,此时i和j指向同一个位置,即基准元素pivot的最终位置
4.算法实现
5.运行结果
- 分治法--快速排序
- 分治法--快速排序
- 分治法-快速排序
- 分治法-快速排序
- 分治法-----快速排序
- 分治法 --快速排序
- 分治法-快速排序
- 分治法--快速排序
- 快速排序 分治法
- 分治法-快速排序
- 分治法之快速排序
- 分治法之快速排序
- 排序4--快速(分治法)
- 分治法之快速排序
- 分治法(Scheme) -- 快速排序
- 分治法之快速排序
- 分治法-----快速排序算法
- 快速排序(分治法)
- 【Leetcode】Container With Most Water in JAVA
- OC--消息机制
- 《OSGi技术》
- UITableView的cell的释放、内容消失等的思考总结
- 数据结构第四章
- 分治法-----快速排序
- 实战5--读入员工工资
- 国产InitPHP框架系列 - InitPHP框架搭建高可用WEB应用05:数据层Dao使用
- OC模拟试题总结
- SQL 查询重复和删除重复行的绝招(包括多行和单行)
- 数据结构第五章
- OC知识点总结
- ECSTORE 新建APP应用
- 第十四周项目三:带名字的多科成绩单(二)