从待排序列中任取一个元素(例如取第一个) 作为中心,所有比它小的元素一律前放,所有比它大的元素一律后放,形成左右两个子表;然后再对各子表重新选择中心元素并依此规则调整(递归自己),直到每个子表的元素首尾标记相等或差值为一。此时便为有序序列了。
先在要排序的序列 array中选取一个中轴值,而后将序列分成两个部分,其中左边的部分中的元素均小于或者等于中轴值,右边的部分元素均大于或者等于中轴值,而后通过递归调用快速排序的过程分别对两个部分进行排序,最后将两部分产生的结果合并即可得到最后的排序序列。
下面我们通过一个案例来演示一下快速排序的基本步骤: 以序列{ 56, 92, 24,37, 48, 86, 13, 39, 50, 90} 共10个元素。
public int[] quickSort(int[] array, int low, int high ,int[]arraymark){
//挖坑填坑法:
int temp;
temp = array[low];
while (low < high){
while(array[high] > temp && low < high) {
--high;
}
array[low] = array[high];
while (array[low] <= temp && low < high){
++low;
}
array[high] = array[low];
}
array[low] = temp;
arraymark[1]++;
if (arraymark[1] < 10) {
System.out.print("第0" + arraymark[1] + "次快速排序结果:");
}else{
System.out.print("第" + arraymark[1] + "次快速排序结果:");
}
for (int index = 0; index < array.length; index++) {
System.out.print(array[index] + " ");
}
arraymark[0] = low;
System.out.println();
return arraymark;
}public void qSort(int[] array, int low, int high, int[] pivotkey){
if (low < high){
pivotkey = quickSort(array, low, high ,pivotkey);
qSort(array,low,pivotkey[0]-1,pivotkey);
qSort(array,pivotkey[0]+1,array.length-1,pivotkey);
}
}
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |