【发布时间】:2016-12-10 18:36:38
【问题描述】:
我用 C 编写了一个递归合并排序算法。但它不起作用。
#include <stdio.h>
这是我的算法:
void mearge( int a[],int elementsOfA,int b[],int elementsOfB,int c[]){
int elementsOfC = elementsOfB + elementsOfA;
int i=0,j=0,k=0;
while(k<elementsOfC){
if(a[i]<=b[j] || j==elementsOfB) {
c[k]=a[i];
i++;
k++;
}
if(b[j]<a[i] || i==elementsOfA) {
c[k]=b[j];
j++;
k++;
}
}
}
void meargeSort(int a[], int indexOfLeft, int positionOfRight, int b[]){
if(positionOfRight-indexOfLeft==1){
b[0]=a[indexOfLeft];
}
if(positionOfRight-indexOfLeft>1){
int mid = (positionOfRight+indexOfLeft)/2;
//int left[mid-1],right[positionOfRight-mid];
int left[mid],right[positionOfRight-mid];
meargeSort(a,indexOfLeft,mid,left);
meargeSort(a,mid,positionOfRight,right);
mearge(left,mid-indexOfLeft,right,positionOfRight-mid,b);
}
}
这是我的主要功能。我为算法提供了两种不同的输入:
- 首先是数组 arr
- 其次是数组brr。
在这两种情况下,输出都是不正确的排序
int main(int argc, char **argv)
{
int i, arr[]={5,42,31,1,-1,23,0}, brr[7];
meargeSort(arr,0,7,brr);
//int i, brr[]={-1,23,0},brr[3];
//meargeSort(arr,0,3,brr);
for(i=0;i<7;i++)
printf("%d ",brr[i]);
return 0;
}
【问题讨论】:
-
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建最小、完整和可验证的示例。
-
您应该在 merge_sort() 函数中填充 left[]/right[] 数组
标签: c arrays algorithm sorting mergesort