c# 快速排序
阿新 • • 發佈:2018-11-28
public void QuickSort(int[] array, int head, int last)
{
int left = head;//左側遊標
int right = last;//右側遊標
if (left >= right) return;//排序終止條件
int key = array[head];//最左側的為基準值
while (left < right)
{
//從右側向左查詢首個小於基準值的值array[right]
while (left < right && array[right] >= key)
{
right--;
}
//從左側向右查詢首個大於基準值的值array[left]
while (left < right && array[left] <= key)
{
left++;
}
//左側大於基準值的array[left]與右側小於基準值的array[right]交換位置
if (left < right)
{
int temp = array[left];
array[left] = array[right];
array[right] = temp;
//array[left] = array[left] ^ array[right];
//array[right] = array[left] ^ array[right];
//array[left] = array[left] ^ array[right];
}
}
//一輪探測結束,基準值歸位(排序後的真實位置)
array[head] = array[left];
array[left] = key;
QuickSort(array, head, left - 1);
QuickSort(array, left + 1, last);
}