基礎思想:通過不斷比較關鍵碼,以某咯記錄為界(該記錄成為支點),將待排序列分成兩部分。其中,一小部分滿足所有記錄的關鍵碼都大於或等於支點記錄為界將待排序列按關鍵碼中分成兩部分的過程,稱為一次劃分,直到整個序列按關鍵碼有序為止。
代碼如下:
/// <summary>
/// 快速排序算法
/// </summary>
public class QuickSort : IAction
{
#region 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;
int j = high;
int 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);
}
}
#endregion
}