以某記錄為基準點,將待排序列分為兩部分:一部分所有關鍵碼大於等於基準點,另一部分小於等於基準點。遞迴進行直到整個序列有序。
public class QuickSort : IAction {
public void Action() {
int[] array = Program.RandomArray();
QuickSortArray(array, 0, array.Length - 1);
}
private void QuickSortArray(int[] arr, int low, int high) {
int i = low, j = high, tmp = arr[low];
while (low < high) {
while (low < high && arr[high] >= tmp) --high;
arr[low] = arr[high];
while (low < high && arr[low] <= tmp) ++low;
arr[high] = arr[low];
--high;
}
arr[low] = tmp;
if (i < low - 1) QuickSortArray(arr, i, low - 1);
if (j > low + 1) QuickSortArray(arr, low + 1, j);
}
}
下篇將進行效能測試比較。