快速排序基本思想:挖坑填數+遞歸分治
快速排序使用分治法的策略,把一個串行分成2個子串行,快速排序又是一種分而治之的思想在排序算法是上的典型應用,本質上看,快速排序應該算冒泡排序基礎上的遞歸分治法,快速排序名字簡單粗暴,顧名思義就是快而且效率高,它是處理大數據最快的算法之一了。
算法描述:
1、從數列中任意挑出一個數作為基准(pivot)
2、重新排序,所有比基准大的數放在基准左邊,所有比基准大的數放在基准右邊,這樣排序一遍后該基准就位於數列的中間,這個就被稱為分區操作(partition)
3、遞歸地把小於基准的數列和大於基准的數列進行排序
遞歸到最底部時,數列的大小是0或1,也就是已經排序好了,這個算法一定會結束,因為每次迭代的時候它至少會把一個元素排到最后的位置去
public static void sort(int[] a, int low, int high) {
//已經排完
if (low >= high) {
return;
}
int left = low;
int right = high;
//保存基准值
int pivot = a[left];
while (left < right) {
//從后向前找到比基准小的元素
while (left < right && a[right] >= pivot)
right--;
a[left] = a[right];
//從前往后找到比基准大的元素
while (left < right && a[left] <= pivot)
left++;
a[right] = a[left];
}
// 放置基准值,准備分治遞歸快排
a[left] = pivot;
sort(a, low, left - 1);
sort(a, left + 1, high);
}