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