
归并排序
发布日期:2021-05-10 06:31:56
浏览次数:18
分类:精选文章
本文共 2672 字,大约阅读时间需要 8 分钟。
优化后的内容
1. 基于递归的归并排序实现
1.1 打印函数
该函数用于在控制台打印数组内容,便于测试和调试。具体实现如下:
void Print(int* array, int size) { for (int i = 0; i < size; i++) { printf("%d ", array[i]); } printf("\n");}
1.2 排序函数
该函数将数组拆分为两部分,然后进行排序。具体实现如下:
void MergeData(int* array, int left, int mid, int right, int* temp) { int begin1 = left, end1 = mid; int begin2 = mid, end2 = right; int index = left; while (begin1 < end1 && begin2 < end2) { if (array[begin1] <= array[begin2]) { temp[index++] = array[begin1++]; } else { temp[index++] = array[begin2++]; } } while (begin1 < end1) { temp[index++] = array[begin1++]; } while (begin2 < end2) { temp[index++] = array[begin2++]; }}
1.3 递归排序函数
该函数采用递归的方式实现归并排序。具体实现如下:
void _MergeSort(int* array, int left, int right, int* temp) { if (right - left > 1) { int mid = left + ((right - left) >> 1); _MergeSort(array, left, mid, temp); _MergeSort(array, mid, right, temp); MergeData(array, left, mid, right, temp); memcpy(array + left, temp + left, (right - left) * sizeof(array[0])); }}
1.4 调用函数
该函数负责初始化辅助数组并调用递归函数。具体实现如下:
void MergeSort(int* array, int size) { int* temp = (int*)malloc(sizeof(array[0]) * size); if (temp == NULL) { assert(0); return; } _MergeSort(array, 0, size, temp); free(temp);}
2. 基于循环的归并排序优化
2.1 简单描述
这种方法借助“gap”变量将排序范围不断扩大,每次处理更多元素。具体实现如下:
2.2 代码实现
void MergeSortNor(int* array, int size) { int gap = 1; // 初始化间隔 int* temp = (int*)malloc(sizeof(array[0]) * size); if (temp == NULL) { assert(0); return; } // 依次扩大gap范围 while (gap < size) { // 循环处理当前范围内的元素 for (int i = 0; i < size; i += 2 * gap) { int left = i; int mid = left + gap; int right = mid + gap; // 防止越界 if (mid > size) mid = size; if (right > size) right = size; MergeData(array, left, mid, right, temp); } // 拷贝排序结果回到原数组 memcpy(array, temp, size * sizeof(array[0])); // 更新gap gap <<= 1; // 当前gap乘以2,逐步扩大范围 } free(temp);}
3. 测试代码
int main() { int array[] = {8, 2, 1, 5, 3, 4, 7, 6, 9, 0}; Print(array, sizeof(array) / sizeof(array[0])); // 仅为示例,用户应根据实际需求调用并解释 // MergeSortNor(array, sizeof(array) / sizeof(array[0])); Print(array, sizeof(array) / sizeof(array[0]));}
4. 功能说明
4.1 递归实现
该方法通过递归将数组不断分成两部分进行排序,最终归并后返回,从而实现归并排序。
4.2 循环优化
通过逐步增加间隔值(gap),该方法简化了递归的复杂性,逐步扩大排序范围,提升效率。
4.3 测试示例
提供了一个排序前后的测试示例,可用于验证排序功能的正确性。
以上代码可根据项目需求选择使用递归或循环实现。递归实现更直观,循环实现可能在内存使用或性能上更为优化。
发表评论
最新留言
很好
[***.229.124.182]2025年04月06日 14时01分39秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
抖音发布黄金时间段,抖音上热门最佳时间
2019-03-10
Thymeleaf sec:authorize 标签不生效
2019-03-11
Iterable与Iterator
2019-03-11
SecSolar:为代码“捉虫”,让你能更专心写代码
2019-03-11
GRUB2
2019-03-11
微信JS-SDK DEMO页面和示例代码
2019-03-11
GridView自定义删除操作
2019-03-11
一张图搞定RPC框架核心原理
2019-03-11
Scala中的包
2019-03-11
他来了他来了,他带着云栖大会的免费门票走来了
2019-03-11
获取linux 主机cpu类型
2019-03-11
Android Studio updating indices 一直刷新和闪烁
2019-03-11
pwntools编写技巧
2019-03-11
How2Heap笔记(三)
2019-03-11
layer.confirm 无效
2019-03-11
pycharm使用(新建工程、字体修改、调试)
2019-03-11
Python学习笔记——元组
2019-03-11
异常声音检测
2019-03-11