快速排序
分治法
从目标数组中随机取一个作为标记,从右侧开始比较,比标记大不动,比标记小则进行交换,再从左边进行比较,再对以这个标记为分界线的两边数组重复前面步骤,直至所有数据作为标记比较完成。
举个栗子
目标:对数组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

浙公网安备 33010602011771号