快速排序

快速排序是对冒泡排序的一种改进

快速排序算法的基本思想:将要进行排序的数分为左右两个部分,其中一部分的所有比另外一部分的数据小,然后将所分得两部分数据进行同样的划分,重复执行以上的划分操作。直到所有要进行排序的数据变为有序为止。

第一步

定义两个变量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
(6)将划分得到的左右两部分A[low.....pos-1]和A[pos+1.....high]继续采用以上操作步骤进行划分,直到得到有序序列为止。

posted @ 2022-01-08 20:52  不会笑的孩子  阅读(27)  评论(0编辑  收藏  举报