快速排序原理

3天前 (04-07 05:10)阅读1回复0
kewenda
kewenda
  • 管理员
  • 注册排名1
  • 经验值210305
  • 级别管理员
  • 主题42061
  • 回复0
楼主
1、快速排序算法 2、快速排序 3、快速排序的详尽 过程 4、快速排序算法原理与实现 快速排序算法

快速排序(Quicksort)是对冒泡排序的一种改进 。

然后,右边和右边的数据能够独立排序。关于左侧的数组数据,又能够取一个分界值,将该部门数据分红摆布两部门,同样在右边放置较小值,右边放置较大值。右侧的数组数据也能够做类似处置。

反复上述过程,能够看出,那是一个递回 定义。通过递回 将左侧部门排好序后,再递回 排好右侧部门的挨次。当左、右两个部门各数据排序完成后,整个数组的排序也就完成了。

快速排序算法通过屡次比力和交换来实现排序,其排序流程如下:

(1)起首设定一个分界值,通过该分界值将数组分红摆布两部门。

(2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的右边。此时,右边部门中各元素都小于或等于分界值,而右边部门中各元素都大于或等于分界值。

快速排序

快速排序(Quicksort),计算机科学词汇,适用范畴Pascal,c++等语言,是对冒泡排序算法的一种改进 。

1、起首设定一个分界值,通过该分界值将数组分红摆布两部门。

2、将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的右边。此时,右边部门中各元素都小于分界值,而右边部门中各元素都大于或等于分界值。

3、然后,右边和右边的数据能够独立排序。关于左侧的数组数据,又能够取一个分界值,将该部门数据分红摆布两部门,同样在右边放置较小值,右边放置较大值。右侧的数组数据也能够做类似处置。

4、反复上述过程,能够看出,那是一个递回 定义。通过递回 将左侧部门排好序后,再递回 排好右侧部门的挨次。当左、右两个部门各数据排序完成后,整个数组的排序也就完成了。

排序演示

假设一起头序列{xi}是:5,3,7,6,4,1,0,2,9,10,8。

此时,ref=5,i=1,j=11,从后往前找,第一个比5小的数是x8=2,因而序列为:2,3,7,6,4,1,0,5,9,10,8。

此时i=1,j=8,畴前往后找,第一个比5大的数是x3=7,因而序列为:2,3,5,6,4,1,0,7,9,10,8。

此时,i=3,j=8,从第8位往前找,第一个比5小的数是x7=0,因而:2,3,0,6,4,1,5,7,9,10,8。

此时,i=3,j=7,从第3位往后找,第一个比5大的数是x4=6,因而:2,3,0,5,4,1,6,7,9,10,8。

此时,i=4,j=7,从第7位往前找,第一个比5小的数是x6=1,因而:2,3,0,1,4,5,6,7,9,10,8。

此时,i=4,j=6,从第4位往后找,曲到第6位才有比5大的数,那时,i=j=6,ref成为一条分界限,它之前的数都比它小,之后的数都比它大,关于前后两部门数,能够摘 用同样的办法来排序。

快速排序的详尽 过程

快速排序的详尽 过程如下:

快速排序是指觅 觅 一个参考数值,将小于参考数值的数放在数组的右边,将大于参考数值的数放在数组的右边。详细的实现办法:

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。

参考材料:快速排序算法_百度百科

0
回帖

快速排序原理 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息