插入排序的快速排序代码不起作用

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 我刚刚编辑了我的答案。你能用你的编译器检查一下吗? 哦,我搞砸了,非常感谢您的修复工作。

以上是关于插入排序的快速排序代码不起作用的主要内容,如果未能解决你的问题,请参考以下文章

快速排序模板不起作用,并使我的程序无响应

插入新实体时,NSFetchResultsController 排序不起作用

分区在我的快速排序功能中不起作用

为啥我的选择排序代码不起作用?

使用逗号分隔符的表格排序不起作用

冒泡排序不起作用