排序完的数组出现0,-1,和原来的数组不同,为什么会这样呢?
3条回答 默认 最新
- honestman_ 2022-10-13 18:22关注
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <malloc.h> #include <windows.h> #include <memory.h> //归并排序: /* arr:指定数组 left:判定左边界 right:判断右边界 mid:判断中点 */ void Merge(int* arr, int left, int right, int mid) { int *p = (int*)malloc((right - left + 1) * sizeof(int)); int *temp = p; memset(p, 0, (right - left + 1) * sizeof(int)); int L = left; int R = mid + 1; while (L <= mid && R <= right) { *p++ = arr[L] < arr[R] ? arr[L++] : arr[R++]; } while (L <= mid) { *p++ = arr[L++]; } while (R <= right) { *p++ = arr[R++]; } memcpy(arr + left, temp, (right - left + 1) * sizeof(int)); free(temp); temp = NULL; } void MergeSort(int* arr, int left, int right) { if (left == right) return; int mid = left + ((right - left)>>1); MergeSort(arr, left, mid); //左半边 MergeSort(arr, mid + 1, right); //右半边 Merge(arr, left, right, mid); //排序 } int main() { int arr[10] = { 9,8,3,5,2,1,6,4,7,10}; MergeSort(arr, 0, sizeof(arr)/ sizeof(arr[0]) - 1); for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) { printf("%d ", arr[i]); } system("pause"); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 目详情-五一模拟赛详情页
- ¥15 有了解d3和topogram.js库的吗?有偿请教
- ¥100 任意维数的K均值聚类
- ¥15 stamps做sbas-insar,时序沉降图怎么画
- ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
- ¥15 关于#Java#的问题,如何解决?
- ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
- ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
- ¥15 cmd cl 0x000007b
- ¥20 BAPI_PR_CHANGE how to add account assignment information for service line