當我排序有許多重複元素的數據時,快速排序算法效率低下。任何人都可以解釋爲什麼?
這裏是我的快速排序代碼:爲什麼當有很多重複元素時快速排序效率低下?
int partition(int arr[],int low,int high)
{
int i = low + 1;
int j = high;
int tmp = arr[low];
while(1)
{
while(j != low && arr[j] > tmp) --j; //from right to left
while(i != high && arr[i] <= tmp) ++i; //from left to right
if(i < j)
{
int t = arr[j];
arr[j] = arr[i];
arr[i] = t;
}
else
break;
}
return j;
}
void QuickSort(int arr[],int low,int high)
{
if(low < high)
{
int j = partition(arr,low,high);
int t = arr[j];
arr[j] = arr[low];
arr[low] = t;
if(low < j)
QuickSort(arr,low,j-1);
if(high > j)
QuickSort(arr,j+1,high);
}
}
我補充說,包括版本的快速排序是在處理重複高效,已經排序或反向排序文件的答案。 – rcgldr
@rcgldr - 非常感謝:) – Ren