插入排序的快速排序代码不起作用
Posted
技术标签:
【中文标题】插入排序的快速排序代码不起作用【英文标题】:Code for quicks sort with insertion sort not working 【发布时间】:2014-03-29 14:52:21 【问题描述】:所以我尝试使用插入排序和快速排序来尝试加快速度,但由于我无法弄清楚的原因它不起作用。在我添加插入排序部分之前,排序操作正确。
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
【问题讨论】:
如果您正在寻找速度,std::sort
就是这里的方式。
哦,我确实意识到 std::sort 比我能写的任何东西都快,我这样做只是为了学习经验。
【参考方案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;
【讨论】:
这肯定会破坏排序,重要的是要注意这两个都可以正常工作,所以我想我的错误在于整合它们,但我不知道可能出了什么问题。 我可以得到输入样本和所需的输出吗? @user2968505 我刚刚编辑了我的答案。你能用你的编译器检查一下吗? 哦,我搞砸了,非常感谢您的修复工作。以上是关于插入排序的快速排序代码不起作用的主要内容,如果未能解决你的问题,请参考以下文章