C++ 非递归合并排序跳过

C++ 非递归合并排序跳过,c++,C++,我正在尝试使用自然合并排序对数字数组进行排序。我有一个数组,这些数字按精确顺序排列(9,2129921,38,31,10219,27,45),当我使用我的合并排序函数时,我得到(2,9,10,21,27,45129,38219921),你可以看到,我非常接近于让它排序,但它似乎是部分排序。我似乎找不到我的代码有什么问题,有什么建议吗 void merge(int *a, int size, int low, int high, int mid) { int i, j, k; in

我正在尝试使用自然合并排序对数字数组进行排序。我有一个数组,这些数字按精确顺序排列(9,2129921,38,31,10219,27,45),当我使用我的合并排序函数时,我得到(2,9,10,21,27,45129,38219921),你可以看到,我非常接近于让它排序,但它似乎是部分排序。我似乎找不到我的代码有什么问题,有什么建议吗

void merge(int *a, int size, int low, int high, int mid)
{
    int i, j, k;
    int *c = new int[size];
    i = low;
    k = low;
    j = mid + 1;
    while (i <= mid && j <= high)
    {
        if (a[i] < a[j])
        {
           c[k] = a[i];
           k++;
           i++;
         }
       else
       {
           c[k] = a[j];
           k++;
           j++;
       }
}
while (i <= mid)
{
    c[k] = a[i];
    k++;
    i++;
}
while (j <= high)
{
    c[k] = a[j];
    k++;
    j++;
}
for (i = low; i < k; i++)
 {
    a[i] = c[i];
  }
}
void naturalMS(int * a, int s)
{
    for(int i = 1; i < s; i *= 2)
    {
       for(int low = 0; low < s- i; low += o)
       {
           merge(a,s,low,s-1,low+i-1);
       }
    }
}
void合并(int*a、int-size、int-low、int-high、int-mid)
{
int i,j,k;
int*c=新的int[size];
i=低;
k=低;
j=mid+1;

虽然(i)你应该开始一些实际的调试。创建一个函数,打印出数组的内容,并为程序中的每个重要位置添加系统输出,比如当进行递归调用时。在每个操作之前和之后打印出被操纵的数组。注意你的算法失败的操作。顺便说一句,你真的应该se std::vector而不是数组。你应该开始一些实际的调试。创建一个函数,打印出数组的内容,并为程序中的每个重要位置添加系统输出,比如在进行递归调用时。在每个操作之前和之后打印出操纵的数组。注意你的算法失败的操作。Btw,您真的应该使用std::vector而不是数组。