快速排序開發的時候使用的比較頻繁,平常一般使用jdk的Arrays.sort(int[] array),但jdk的代碼很多,現在自己也寫一個來試試。
這裏要使用遞歸的方式,先將第一個值取出作爲參考,後面每個數都和它進行比較,先從右到左,如果有值比參考值小,就將該數取出,記錄下該數位置,把該數放入到第一個位置,然後在從左到右,如果有值比參考數大,將這個值放入到剛剛記錄的位置。
public void quickSort(int[] array, int begin, int end) {
if (begin >= end) return;
int low = begin;//低位指針
int high = end;//高位指針
int x = array[low];//取出第一個值,作爲比較參考值
boolean direction = true;//true爲從右到左
Flag: //標記
while (low < high) {
if (direction) {
//從右到左
for (int i = high; i > low; i--) {
//1、如果高位的值比參考值小,則將高位的值取出,放入到參考值所在的位置,方向改爲從左到右
if (array[i] <= x) {
array[low] = array[i];
low++;//低位往右移動一位
high = i;//高位指向i
direction = !direction;//方向相反
continue Flag;
}
}
high = low;//如果都沒有的情況下,高位就移動到最低位,
} else {
for (int i = low; i < high; i++) {
//1、如果低位的值比參考值大,則將低位的值取出,放入到參考值所在的位置,方向 改爲從左到右
if (array[i] >= x) {
array[high] = array[i];
high--;//高位往右移動一位
low = i;//低位指向i
direction = !direction;//方向相反
continue Flag;
}
}
low = high;//如果都沒有的情況下,低位就移動到高位,
}
}
array[low]=x;//最後將參考值放入到自己的位置中
quickSort(array, begin, low-1);
quickSort(array, low+1, end);
}
就這一段。測試一下
int[] array = {5,2,1,4,6,8,3,9,7};
quickSort(array, 0, array.length-1);
for (int i : array) {
System.out.print(i+" ");
}
得到結果,1 2 3 4 5 6 7 8 9
大功告成。