在快速排序中處理重復元素的方法是通過增加一個判定條件來確保不再對重復元素進行排序。具體來說,可以在劃分數組時,將與基準元素相等的元素放到基準元素的左邊或右邊,而不是將它們分別放在基準元素的左右兩側。
以下是一個示例代碼:
public static void QuickSort(int[] arr, int low, int high)
{
if (low < high)
{
int pi = Partition(arr, low, high);
QuickSort(arr, low, pi - 1);
QuickSort(arr, pi + 1, high);
}
}
public static int Partition(int[] arr, int low, int high)
{
int pivot = arr[high];
int i = low - 1;
for (int j = low; j < high; j++)
{
if (arr[j] < pivot)
{
i++;
Swap(arr, i, j);
}
else if (arr[j] == pivot)
{
i++;
}
}
Swap(arr, i + 1, high);
return i + 1;
}
public static void Swap(int[] arr, int i, int j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
在上面的代碼中,如果遇到與基準元素相等的元素,將其放在基準元素的左邊(在這里是直接跳過,不再做交換)。這樣可以確保不再對重復元素進行排序,同時保持原始數組的順序。