【排序】--C语言实现归并排序

Jenny ·
更新时间:2024-11-10
· 626 次阅读

归并排序

归并排序将两个有序的序列合并成一个有序的序列。如何得到两个有序的序列,把数据不停的拆分,拆到每个序列只有一个数据。所以归并排序用到了递归思想。

代码 #include #include //两个有序的序列合并成一个有序的序列 void Merge(int *a, int start, int mid, int end) { int LeftLen = mid - start + 1; int RightLen = end - mid; int *L = (int *)malloc(sizeof(int) * LeftLen); int *R = (int *)malloc(sizeof(int) * RightLen); int i, k, j; for (i = 0, k = start; i < LeftLen; i++, k++) { L[i] = a[k]; } for (j = 0; j < RightLen; j++, k++) { R[j] = a[k]; } for (i = 0, j = 0, k = start; i < LeftLen && j < RightLen; k++) { if (L[i] < R[j]) { a[k] = L[i++]; } else { a[k] = R[j++]; } } if (j < RightLen) { for (; j < RightLen; j++, k++) { a[k] = R[j]; } } if (i < LeftLen) { for (; i = end) { return; } int mid = (start + end) / 2; MergeSort(a, start, mid); //拆分,拆成数组只有1个元素 MergeSort(a, mid + 1, end); Merge(a, start, mid, end); } int main() { int i; //int array[] = {4, 2, 7, 9, 0, 6, 2, 1, 8, 3}; int array[10000] = {0}; srand(time(NULL)); for (i = 0; i < 10000; i++) { array[i] = rand() % 1000 + 1; } MergeSort(array, 0, sizeof(array) / sizeof(array[0]) - 1); for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) { printf("%d ", array[i]); } printf("\n"); return 0; }

更多视频、文章、嵌入式学习资料,微信关注 【学益得智能硬件】
在这里插入图片描述


作者:学益得智能硬件



C语言 排序 归并排序

需要 登录 后方可回复, 如果你还没有账号请 注册新账号