快速排序的详细过程快速排序的详细过程如下:
快速排序是指寻找一个参考数值,将小于参考数值的数放在数组的左边,将大于参考数值的数放在数组的右边 。具体的实现方法:
1、随机选取数组中的一个index,其数值作为参考数值 。将参考数值保存,并与数组的第一个位置的数值进行交换;从数组的左边和右边分别开始判断 。
2、当右边的数值满足大于参考数值后退一位;当右边的数值不满足大于参考数值,将当前在数值放入左边当前指向的位置,左边前进一位;紧接着判断左边的数值满足小于参考数值往后进一位,左边的数值不满足小于参考数值,将当前数值放入右边当前指向位置,右边前进一位 。
3、直到左右指向的位置重合,结束上述判断,将参考数值放入重合点,返回 重合点的index 。
4、以重合点出为分界线,分为两个子数组 。子数组重复进行上述判断 。
5、直到传入函数的数组大小为1,退出递归调用 。
【快速排序原理 快速排序】快速排序是指通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序 。
快速排序算法原理与实现快速排序的基本思想就是从一个数组中任意挑选一个元素(通常来说会选择最左边的元素)作为中轴元素,将剩下的元素以中轴元素作为比较的标准,将小于等于中轴元素的放到中轴元素的左边,将大于中轴元素的放到中轴元素的右边 。
然后以当前中轴元素的位置为界,将左半部分子数组和右半部分子数组看成两个新的数组,重复上述操作,直到子数组的元素个数小于等于1(因为一个元素的数组必定是有序的) 。
以下的代码中会常常使用交换数组中两个元素值的Swap方法,其代码如下
public static void Swap(int[] A, int i, int j){
int tmp;
tmp = A[i];
A[i] = A[j];
A[j] = tmp;
扩展资料:
快速排序算法 的基本思想是:将所要进行排序的数分为左右两个部分,其中一部分的所有数据都比另外一 部分的数据小,然后将所分得的两部分数据进行同样的划分,重复执行以上的划分操作,直 到所有要进行排序的数据变为有序为止 。
定义两个变量low和high,将low、high分别设置为要进行排序的序列的起始元素和最后一个元素的下标 。第一次,low和high的取值分别为0和n-1,接下来的每次取值由划分得到的序列起始元素和最后一个元素的下标来决定 。
定义一个变量key,接下来以key的取值为基准将数组A划分为左右两个部分,通 常,key值为要进行排序序列的第一个元素值 。第一次的取值为A[0],以后毎次取值由要划 分序列的起始元素决定 。
从high所指向的数组元素开始向左扫描,扫描的同时将下标为high的数组元素依次与划分基准值key进行比较操作,直到high不大于low或找到第一个小于基准值key的数组元素,然后将该值赋值给low所指向的数组元素,同时将low右移一个位置 。
如果low依然小于high,那么由low所指向的数组元素开始向右扫描,扫描的同时将下标为low的数组元素值依次与划分的基准值key进行比较操作,直到low不小于high或找到第一个大于基准值key的数组元素,然后将该值赋给high所指向的数组元素,同时将high左移一个位置 。
重复步骤(3) (4),直到low的植不小于high为止,这时成功划分后得到的左右两部分分别为A[low……pos-1]和A[pos+1……high],其中,pos下标所对应的数组元素的值就是进行划分的基准值key,所以在划分结束时还要将下标为pos的数组元素赋值 为 key 。
参考资料:快速排序算法_百度百科
快速排序 递推公式
既然设计到递归 。下意识就要想使用递归的两个必要条件
递推公式
递归退出条件
其实递推公式简单 。如图所示 。
如果要排序数组中下标从 startIndex 到 endIndex 之间的一组数据,我们选择 startIndex 到 endIndex 之间的任意一个数据作为 pivot(分区点) 。通常情况下,选择数组最后一个元素 。
我们遍历 startIndex 到 endIndex 之间的数据,将小于 pivot 的放到左边,将大于 pivot 的放到右边,将 pivot 放到中间 。
经过这一步骤之后,数组 startIndex 到 endIndex 之间的数据就被分成了三个部分,前面都是小于 pivot 的,中间是 pivot,后面都是是大于 pivot 的 。
根据分治、递归的处理思想,我们可以用递归排序下标从 startIndex 到 pivot-1 之间的数据和下标从 pivot+1 到 endIndex 之间的数据,直到区间缩小为 1,就说明所有的数据都有序了 。
秒懂生活扩展阅读
- 比重计的测量原理
- 石灰吟中包含哪些化学原理
- 柠檬酸钠的抗凝原理
- 切伦科夫辐射背后的原理是什么
- 电容提高功率因素的原理是什么
- 世界八大强国
- 什么是光合作用原理又是什么
- 我叫mt如何快速150级
- 排序怎么从1排到100 排序
- 灯泡中钨丝能发光的原理