分治法实现合并排序算法:输入一串以英文字符逗号隔开的数字,按升序排列。(c语言)
时间: 2024-10-10 09:17:15 浏览: 54
分治法实现合并排序算法通常用于将数组或列表分成两个独立的部分,对每个部分分别进行排序,然后合并它们。对于输入的一串以英文字符逗号隔开的数字,我们可以先将其分割成一个个元素,再递归地将每个元素的子序列转换为有序序列,最后合并结果。
下面是一个简单的C语言实现合并排序的例子:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 分割字符串并返回两个子串
void split(char *str, char **left, char **right) {
char *p = strtok(str, ",");
if (p == NULL) {
*left = *right = "";
} else {
*left = p;
split(*left + 1, &(*left)[strlen(*left) + 1], right);
}
}
// 合并两个已排序的子串
void merge(char *left, char *right, char *result) {
while (*left && *right) {
if (*(left++) < *(right++)) {
*result++ = *left;
} else {
*result++ = *right;
}
}
// 如果其中一个已经遍历完,将另一个剩余的部分复制到结果中
while (*left) {
*result++ = *left++;
}
while (*right) {
*result++ = *right++;
}
}
// 归并排序函数
void mergesort(char *input) {
if(input != NULL && input[0] != '\0') {
char *left, *right;
split(input, &left, &right);
mergesort(left);
mergesort(right);
merge(left, right, input);
}
}
int main() {
char str[] = "5,3,9,1,8,4";
mergesort(str);
printf("Sorted string: %s\n", str);
return 0;
}
```
阅读全文