数据结构与算法吧 关注:1,921贴子:4,930
  • 1回复贴,共1

救救孩子吧,c语言归并排序

只看楼主收藏回复


想实现归并排序
没有报错,但运行框没有内容
问各个ai,不认为代码有问题
经调试,只找到一个问题,函数process的变量L,mid,R的值一直都是0,不知道怎么解决
下面是代码文本
//归并排序
/*
空间复杂度计算:
T(N) = 2*T(N/2) + O(N)
a = 2, b = 2, d = 1
故时间复杂度为 O(NlogN)
*/
#include<stdio.h>
//整体归并排序算法入口
void all_sort (int arr[], int len);
//归并排序算法入口
void process (int arr[], int L, int R);
//比较合并新数组
void merge (int arr[], int L, int M, int R);
int main (void)
{
//定义数组参数
int arr[] = {3,2,5,6,7,4};
int len = sizeof(arr) / sizeof(arr[0]);
//整体归并排序
all_sort (arr, len);
//遍历输出
for (int i = 0; i < len; i ++)
printf ("%d\n", arr[i]);
return 0;
}
//输入数组,数组长度
void all_sort (int arr[], int len)
{
//算法入口
process (arr, 0, len - 1);
}
//输入数组,最小下标,最大下标
void process (int arr[], int L, int R)
{
//定义中值,进行二分
int mid = L + ((R - L) >> 1);
//递归
process (arr, L, mid);
process (arr, mid + 1, R);
//封装合并
merge (arr, L, mid, R);
}
//输入数组,最小下标,中值,最大下标
void merge (int arr[], int L, int M, int R)
{
//定义空数组及其参数设置
int help [R - L + 1];
int i = 0;
int p1 = L;
int p2 = M + 1;
//循环比较
while (p1 <= M && p2 <= R)
help[i++] = arr [p1] <= arr[p2] ? arr[p1++] : arr[p2++];
while (p1 <= M)
help[i++] = arr[p1++];
while (p2 <= R)
help[i++] = arr[p2++];
//遍历合并
for (i = 0; i < R - L + 1; i ++)
arr[L + i] = help[i];
//测试
for (i = 0; i < R - L + 1; i ++)
printf ("%d\n", arr[L + i]);
}


IP属地:河北1楼2023-11-14 20:27回复
    解决了,递归函数process没有终止,函数开头加一个if L!⁼R即可


    IP属地:河北来自Android客户端2楼2023-11-15 13:52
    回复