快速排序是平均速度最快的排序算法,他的平均時間複雜度 n*log n)
快速排序採用分治法來進行排序,首先先給出一個數組,在一開始隨意選擇一個數pivot,已pivot作爲這個數組的分界點,把大於pivot的數放在右邊,小於pivot的數放在左邊,然後在已pivot的兩邊分界點,右進行一次上一次的操作,這樣就能達到排序的目的了,
好了,我們來看一下代碼。
private static void partition(int[] array,int left,int right) {//這裏是傳遞的數組與最左邊點與最右邊點
int i = left,j=right;
int pivot =array[(left+right)/2];//我們已將這個數組的最中間的值作爲分界點
while (i<=j) { //當中間的值與兩邊的值比較與交換完,結束循環,遞歸另外兩個被分割的數組
while (array[i]<pivot) {//從傳遞進來的最左邊開始如果array[i]小於中間值就那麼下邊就往右 移動一次
i++;
}
while (array[j]>pivot) {
//如果array[j]大於中間值就那麼下邊就往左 移動一次
j--;
}
if (i<=j) {//當已中間值爲分界點的兩邊,沒有比較完就交換
int temp=array[i];
array[i]=array[j];
array[j]=temp;
i++;
j--;
/*
*如果兩邊都滿足了條件就交換位置,然後位置都向前移動
*/
}
}
//第一次中間點比較完之後,就要開始比較另外兩邊了
if (left<j) {
partition(array, left, j);
}
if (i<right) {
partition(array, i, right);
}
}
這段代碼就是快速排序了,我們對這個數組進行了,分治法,首先把一個數組分成兩個數組,兩個數組要中間值對兩個數比較完了之後又會把這和兩個交換完的數組分成4個數組,進行找中間值,比較操作。
我們來看一下結果