我正在尝试使用quicksort算法对一些二进制文件进行排序。我做了一个合并排序算法,能够在7秒内对10,000,000个数字进行排序。我试图看看quicksort是否会更快地做到这一点,但是,我无法让我的快速通道工作。它正确地对数据进行排序,但它从二进制文件中取出4并将其转换为10。
当我调用quicksort时,我会这样做:Quicksort(size,1,arrayToSort); - 大小是二进制列表的大小,所以它正在改变,我正在测试10个数字,所以它现在是10,代表高,或者h。我使用1代表低,或者因为我从1个基数开始。我将分区和排序功能结合起来只是一个很大的功能。任何想法都会有所帮助,谢谢。
void Quicksort(int h, int l, int *arrayToSort)
{
int Pivot = arrayToSort[(l + h) / 2];
arrayToSort[Pivot] = arrayToSort[l];
int templ = l, temph = h;
while (true)
{
while (arrayToSort[h] > Pivot && l < h)
{
h--;
}
if (l < h)
{
arrayToSort[l] = arrayToSort[h];
l++;
}
else
{
arrayToSort[h] = Pivot;
break;
}
while (arrayToSort[l] < Pivot && l < h)
{
l++;
}
if (l < h)
{
arrayToSort[h] = arrayToSort[l];
h--;
}
else
{
arrayToSort[l] = Pivot;
break;
}
}
if (l - templ >= 2)
Quicksort(h - 1, templ, arrayToSort);
if (temph - h >= 2)
Quicksort(temph, l + 1, arrayToSort);
}
答案 0 :(得分:0)
第一个错误就在这里,你覆盖了Pivot'th位置而不是Pivot的位置。
arrayToSort[Pivot] = arrayToSort[l];