三人行,必有我師
方法 1
關鍵過程圖
java 代碼
/**
* 快速排序 爲 不穩定排序
* @author jishali
*
*/
public class QuickSort {
public static int divide(int[] array, int l, int r) {
int point = l + (int)Math.random()*(r - l); // 隨機選取軸點元素
int temp = array[point];
while (l < r) {
while (l < r) {
if (temp < array[r]) { // 如果是 <= ,當相同元素較多時,會出現軸點元素temp分佈不均勻,
r--;
} else {
array[l] = array[r];
l++;
break;
}
}
while (l < r) {
if (temp > array[l]) {
l++;
} else {
array[r] = array[l];
r--;
break;
}
}
}
array[l] = temp;
return l;
}
public static void quickSort(int[] array, int l, int r) {
if (l>r) {
return;
}
int middle = divide(array, l, r);
quickSort(array, l, middle - 1);
quickSort(array, middle + 1, r);
}
public static void result(int[] array) {
for (int i : array) {
System.out.print(i + " ");
}
}
public static void main(String[] args) {
int[] array = {3,5,6,2,9,0};
quickSort(array, 0, array.length-1);
result(array);
}
}
方法 2
public class QuickSort {
public static int divide(int[] array, int L, int R) {
int point = array[R];
int j = L;
for (int i = L; i < R; i++) { // 從L 開始
if (array[i] < point) {
int temp = array[j];
array[j] = array[i];
array[i] = temp;
j++;
}
}
int temp = array[j];
array[j] = array[R];
array[R] = temp;
return j;
}
public static void quickSort(int[] array, int l, int r) {
if (l > r) {
return;
}
int middle = divide(array, l, r);
quickSort(array, l, middle - 1);
quickSort(array, middle + 1, r);
}
public static void result(int[] array) {
for (int i : array) {
System.out.print(i + " ");
}
}
public static void main(String[] args) {
int[] array = { 10, 4, 7, 2, 9, 0, 7 };
quickSort(array, 0, array.length - 1);
result(array);
}
}