Быстрое алгоритм сортировки имеет плохое поведение, когда есть много копий элементов. (Я имею в виду, что у нас есть повторяющиеся данные). Как его можно улучшить, чтобы эта проблема была решена.Усовершенствование быстрой сортировки
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' (merge) и' qsort' (быстрая сортировка). Кроме того, что вы подразумеваете под «копией предметов»? Если у вас есть список номеров, в которых задействованы дубликаты, вы не можете сказать, что они являются копиями. Это просто дубликаты, которые хранят часть данных. – ha9u63ar
Вы имеете в виду много повторяющихся предметов или предметов, повторяющихся много раз? –
@YvesDaoust: Я имею в виду, например, у нас есть 11113333333222299999999000000031115553333. – sarina