快速排序

分治法

从目标数组中随机取一个作为标记,从右侧开始比较,比标记大不动,比标记小则进行交换,再从左边进行比较,再对以这个标记为分界线的两边数组重复前面步骤,直至所有数据作为标记比较完成。

举个栗子

目标:对数组a[] = {6,2,9,1,7,4,5}进行快排

1:定义一个临时变量temp作为标记,start=1,end=A.length-1;

2:取A[0]为第一个标记temp,temp = 6,从a[end--]开始与temp比较,a[0]>a[6],进行交换,a={5,2,9,1,7,4,6};  start=1,end=5

3:交换一次,a[start++]开始与temp进行比较,a[start++]<a[6],不变,继续比较,a[start++]>a[6],交换,a={5,2,6,1,7,4,9}; start=3,end=5

4:重复2步骤,a[end--]<a[2],交换,a={5,2,4,1,7,6,9};  start=3 ,end=4

5:重复3步骤,a[start++]<a[5],a[start++]>a[5],交换,a={5,2,4,1,6,7,9};  start=5,end=4

6:start>end,结束此次循环比较

7:对标记左侧递归调用以上步骤,再次调用时,end设置为temp(a[4])的前一位;  递归头:start==end

8:对标记右侧递归调用以上步骤,再次调用时,start设置为temp(a[4])的后一位;  递归头:start==end

posted @ 2020-11-04 16:35  演而优则导  阅读(34)  评论(0)    收藏  举报