快速排序之区间划分
来源:互联网 发布:mac finally free 编辑:程序博客网 时间:2024/05/18 02:44
快速排序的关键在于区间划分,是指将待排序的数组原地进行区间划分,原理是:将待排序的数组的最后一个元素作为主元,将小于主元的数组元素放在数组较小的下标,将大于主元的数组元素放在较大的下标。主元放在两者之间。(注意:是原地分区,所以分区后还是在待排序的数组里)
在初始化时,默认分区的两个子数组元素个数均为0.对待排序的数组进行遍历,将每个元素从下标0开始与主元比较,大于主元的,就放在右边,小于主元的,放在左边。对于遍历到某一下标j,如果A[j]**小于**A[n],此时已经有j-1元素按序放在A[0…j-1]中了,一些为小于主元的,一些大于主元的,但此时A[0…j-1]中没有主元,他们紧挨放的。当为A[j]时,此时就增加了一个元素,就把A[0…j]中第一个大于主元的值换到A[j]处,那么A[j]就被换到小于主元的那里,是此时最后一个小于主元的。直到遍历到倒数第二个元素。最后一个元素是主元,不不能遍历。循环结束。结束后,要把主元放到两者这件,此时就把第一个大于主元的值和主元位置对换,这样就达到把主元放到两者之间的目的了。
代码如下:
int Insert::Partition(vector<int> &coll,int p,int total){ int left=p-1,right=0,temp=0; int pivot=coll[total];//主元,主元只用于比较,不用于迭代 for(right=p;right<total;++right) { if(coll[right]<pivot) { ++left; temp=coll[left]; coll[left]=coll[right]; coll[right]=temp; } } coll[total]=coll[++left]; coll[left]=pivot; return left;}
注意:遍历时使用的是right,不能使用left,因为有时候right不一定为0,只能说是刚开始遍历时,left+1=right;若使用left会出错。此处P代表要遍历的起始下标(不一定是下标0),total是数组的最后一个下标。
0 0
- 快速排序之区间划分
- 快速排序中的区间划分
- 快速排序之划分(java)
- 排序算法之三路划分的快速排序
- 快速排序中分区算法的延伸——划分多个区间
- 数据结构与算法之七(划分算法与快速排序)
- 双向划分的快速排序
- 快速排序的Hoare划分
- 数据结构-快速排序-划分算法
- 快速排序的三者取中划分
- 快速排序(递归、分治、划分)
- 快速排序的最早划分方法:Hoare划分
- 快速排序.对区间的模糊排序
- 快速排序的划分子序列思想:
- 快速排序的思想进行划分搜索。
- 快速排序 (解决小划分文件)
- 划分算法(快速排序的根基)
- java双向划分的快速排序
- 手把手教你使用Git
- JavaScript学习(5.5.2):跳转之break语句
- LDA文档主题生成模型
- Tab框架结构总结
- 一步一步学习TypeScript(02.基本类型)
- 快速排序之区间划分
- Sublime快捷键
- Android中让Dialog全屏
- at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:54
- HBase 最新版本(1.0以上)测试案例
- 设置max-age|expires进行优化网站
- Foundation 框架知识点
- Linux Shell编程入门
- mysql主从同步常见异常及恢复方法