递归合并排序不起作用

时间:2016-08-04 14:50:27

标签: c arrays algorithm sorting mergesort

我在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);
    }
}

这是我的主要功能。我给algotithm两个不同的输入:

  • 首先是数组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;
}

1 个答案:

答案 0 :(得分:1)

一样修复
while(k<elementsOfC){
    if(j == elementsOfB || i != elementsOfA &&  a[i] <= b[j]){//need check `i`
        c[k++]=a[i++];
    } else if(i == elementsOfA || b[j] < a[i]){
        c[k++] = b[j++];
    }
}