【发布时间】:2015-03-19 08:07:55
【问题描述】:
快速排序算法在有很多副本时表现不佳。(我的意思是我们有重复数据)。如何改进这个问题。
int partition (int low,int high)
{
int j=low,i=low+1;
int PivotItem=arr[low];
for(int i=0,j=0;i<n;i++)
{
if(arr[i]==PivotItem)
subarray[j]=arr[i];
}
for(i=low+1;i<=high;i++)
{
if(arr[i]<PivotItem)
{
j++;
swap(arr[i],arr[j]);
}
}
swap(arr[low],arr[j]);
int PivotPoint=j;
return PivotPoint;
}
void quick_sort(int low,int high)
{
if(low==high)
return ;
int PivotPoint=partition(low,high);
quick_sort(low,PivotPoint-1);
quick_sort(PivotPoint+1,high);
}
【问题讨论】:
-
您的目标是特定的语言平台吗?在 Java 中,
Collections.sort()实际上会进行合并排序,尤其是为了避免不必要的数据复制。在 C++ 中,您有单独的sort(合并)和qsort(快速排序)。另外,您所说的“项目副本”是什么意思?如果您有涉及重复的数字列表,则不能说它们是副本。他们只是复制部分数据。 -
你的意思是很多重复的项目还是重复很多次的项目?
-
@YvesDaoust:例如,我们有 111133333332222999999999000000031115553333。
-
尝试每层缩进 4 个空格。
-
可以选择压缩数据:将序列转换为
(value, repeat count)表示,对其进行快速排序并恢复为原始表示。