合并排序不能正常工作

时间:2017-10-14 22:42:35

标签: c algorithm sorting merge mergesort

所以有一堆结构,每个结构都有两个字符串。我试图编写一个合并排序来根据它们的第一个字符串对它们进行排序。

这是结构声明:

struct Voyage {
char city[10];
char time[6];
};

他们将根据城市字符串进行排序。

这里是mergeSort函数:

void mergeSortCities (struct Voyage* voyages, int l, int r){
int m;
if (r > l){
    m = (l+r-1)/2;
    mergeSortCities (voyages, l, m);
    mergeSortCities (voyages, m+1, r);
    mergeCities (voyages, l, m, r);
}
}

合并功能:

void mergeCities (struct Voyage* voyages, int l, int m, int r){
int i, j, k;
int n1 = m-l+1;
int n2 = r-m;
struct Voyage leftArr[n1], rightArr[n2];

for (i=0;i<n1;i++){
    leftArr[i] = voyages[l+i];
}
for (j=0;j<n2;j++){
    rightArr[j] = voyages[m+1+j];
}

i=0; j=0; k=0;

while (i < n1 && j < n2){
    if (strcmp(leftArr[i].city, rightArr[j].city) <= 0){
        voyages[k] = leftArr[i];
        i++;
    } else {
        voyages[k] = rightArr[j];
        j++;
    }
    k++;
}

while (i < n1){
    voyages[k] = leftArr[i];
    i++;
    k++;
}
while (j < n2){
    voyages[k] = rightArr[j];
    j++;
    k++;
}
}

我在main函数中用这一行调用函数:

mergeSortCities (voyages, 0, choice-1);

我承认我从网站上复制粘贴算法并根据我的需要对其进行编辑,但结果却搞砸了。它们没有按原样分类。这个算法有什么问题?当我只进入两个城市时,它可行。但是当我输入3个字符串时,比如a,b,c,并使用上面给出的函数对它们进行排序,输出为b,c,c。

0 个答案:

没有答案