1:基本思想:
快速排序是屬于交換類排序拓颓,采用不斷的比較和移動來實現(xiàn)排序颁井∶闾桑快速排序是一種非常高效的排序算法尚氛,它的實現(xiàn),增大了記錄和比較和移動的距離,從而減少總的比較此時和移動次數(shù)。采用分而治之的思想,將一個大的問題拆成一個小的問題劣光,小的問題拆成更小的問題。
快速排序(英語:Quicksort)糟把,又稱劃分交換排序(partition-exchange sort)绢涡,通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小糊饱,然后再按此方法對這兩部分數(shù)據(jù)分別進行快速排序垂寥,整個排序過程可以遞歸進行,以此達到整個數(shù)據(jù)變成有序序列另锋。
步驟為:
1:從數(shù)列中挑出一個元素滞项,稱為"基準(zhǔn)"(pivot)
2:重新排序數(shù)列,所有元素比基準(zhǔn)值小的擺放在基準(zhǔn)前面夭坪,所有元素比基準(zhǔn)值大的擺在基準(zhǔn)的后面(相同的數(shù)可以到任一邊)文判。在這個分區(qū)結(jié)束之后,該基準(zhǔn)就處于數(shù)列的中間位置室梅。這個稱為分區(qū)(partition)操作戏仓。
3:遞歸地(recursive)把小于基準(zhǔn)值元素的子數(shù)列和大于基準(zhǔn)值元素的子數(shù)列排序。
遞歸的最底部情形亡鼠,是數(shù)列的大小是零或一赏殃,也就是永遠都已經(jīng)被排序好了。雖然一直遞歸下去间涵,但是這個算法總會結(jié)束仁热,因為在每次的迭代(iteration)中,它至少會把一個元素擺到它最后的位置去
快速排序的分析
代碼實現(xiàn)
private static int[] quickSortIntArray(int[] array, int start, int end) {
if (start > end) {
return array;
}
int middle = array[start];
int left = start;
int right = end;
while (left < right) {
//如果右邊的值比左邊大指針繼續(xù)往左移動
while (left < right && array[right] > middle) {
right --;
}
array[left] = array[right];//右邊的值移到左邊的位置
//如果左邊的值比右邊小指針繼續(xù)往右移動
while (left < right && array[left] <= middle) {
left++;
}
array[right] = array[left];
}
array[left] = middle;
quickSort(array, start, left - 1);
quickSort(array, left +1, end);
return array;
}