所以我试图使用快速排序的插入排序来尝试加快速度,但是由于我无法理解的原因它无法正常工作。在添加插入排序部件之前,排序操作正确。
void QuickSort(int data[], int p, int r)
{
if (p < r)
{
if (r - p < 10)
{
InsertionSort(data, p, r);
return;
}
int pivotIndex = Partition(data, p, r);
QuickSort(data, p, pivotIndex - 1);
QuickSort(data, pivotIndex + 1, r);
}
}
void InsertionSort(int data[], int p,int r)
{
int i, j, temp;
for (i = p; i<(r-p)+1; i++)
{
temp = data[i];
for (j = i - 1; j >= 0 && data[j]>temp; j--)
data[j + 1] = data[j];
data[j + 1] = temp;
}
}
此处的完整源代码: - https://gist.github.com/anonymous/9856210
答案 0 :(得分:1)
我想知道你为什么要这么做
i < (r-p) + 1
我对此表示怀疑。
void InsertionSort(int data[], int p,int r)
{
int i, j, temp;
for (i = p; i <= r; i++)
{
temp = data[i];
for (j = i - 1; j >= 0 && data[j]>temp; j--)
data[j + 1] = data[j];
data[j + 1] = temp;
}
}