快速排序是一種非常高效的排序算法,它的實現,增大了記錄和比較和移動的距離,從而減少總的比較此時和移動次數。采用分而治之的思想,將一個大的問題拆成一個小的問題,小的問題拆成更小的問題。
public static void quickSort(int []array,int low,int high) {
if(low>=high){
return;
}
int left=low;
int right=high;
int base = array[low];
while (left!=right) {//從后面開始檢索 遇到比基準數小的就停下,遇到比基準數大于等于的就繼續檢索
while (array[right]>=base&&left<right) {//left小于right 防止越界 比如數組內所有元素都比base小就會一路走下去
right--;
}
while (array[left] <= base&&left<right) {
left++;
}
int temp=array[left];
array[left]=array[right];
array[right]=temp;
}
//交換基準值和相遇位置的值
array[low]=array[left];//相遇的值一定小于基準值
array[left]=base;
quickSort(array,low,left-1);
quickSort(array,left+1,high);
}
快速排序
時間復雜度最好情況是都能分割成較完美的兩部分 O(nlog(n)),最壞情況是數組是有序的每次分割只有一邊 O(n^2)
空間復雜度為O(nlog(n)) 穩定性:不穩定
快速排序再最壞的情況下可以優化,即優化基準值
三數取中法即low mid high 取中間大小的數字為基準值