gpt4 book ai didi

c - 合并排序 C 中的字符串数组

转载 作者:太空宇宙 更新时间:2023-11-04 02:06:33 25 4
gpt4 key购买 nike

我正在尝试对从标准输入输入的字符串数组实现合并排序,但我不知道哪里出了问题。现在我正面临段错误。我应该如何修改我的代码?

main() {
char temp;
int i = 0;
char Strings[NUM][LEN];

printf("Please enter %d strings, one per line:\n", NUM);
for (i; i < 25; i++) {
fgets(&Strings[i][0], LEN, stdin);
}

i = 0;
puts("\nHere are the strings in the order you entered:");
for (i; i < 25; i++) {
printf("%s\n", Strings[i]);
}

mergesort(Strings, NUM);

i = 0;
puts("\nHere are the strings in alphabetical order");
for (i; i < 25; i++) {
printf("%s\n", Strings[i]);
}
}

int mergesort(char list[NUM][LEN], int length) { // First part
mergesort_r(0, length, list);
return 0;
}

int mergesort_r(int left, int right, char list[NUM][LEN]) { // Overloaded portion
if (right - left <= 1) {
return 0;
}

int left_start = left;
int left_end = (left + right) / 2;
int right_start = left_end;
int right_end = right;

mergesort_r( left_start, left_end, list);
mergesort_r( right_start, right_end, list);

merge(list, left_start, left_end, right_start, right_end);
}

int merge(char list[NUM][LEN], int left_start, int left_end, int right_start, int right_end) {

int left_length = left_end - left_start;
int right_length = right_end - right_start;

char *left_half[left_length];
char *right_half[right_length];

int r = 0;
int l = 0;
int i = 0;

for (i = left_start; i < left_end; i++, l++) {
strcpy(left_half[l], list[i]);
}

for (i = right_start; i < right_end; i++, r++) {
strcpy(right_half[r], list[i]);
}

for (i = left_start, r = 0, l = 0; l < left_length && r < right_length; i++) {
if (strcmp(left_half[l], right_half[r]) < 0) {
strcpy(list[i], left_half[l++]);
} else {
strcpy(list[i], right_half[r++]);
}
}

for ( ; l < left_length; i++, l++) {
strcpy(list[i], left_half[l]);
}
for ( ; r < right_length; i++, r++) {
strcpy(list[i], right_half[r]);
}
return 0;
}

我不确定是不是我传递的数组不正确,或者我什至没有正确执行交换。我对此束手无策,可以使用一些建议。

最佳答案

应该是

char left_half[left_length][LEN];
char right_half[right_length][LEN];

关于c - 合并排序 C 中的字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20106531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com