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

时间:2014-03-29 14:52:21

标签: c++ algorithm sorting optimization

所以我试图使用快速排序的插入排序来尝试加快速度,但是由于我无法理解的原因它无法正常工作。在添加插入排序部件之前,排序操作正确。

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

1 个答案:

答案 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;
   }
}