归并排序算法
2021/11/6 17:10:41
本文主要是介绍归并排序算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
原理
每次数组分成两部分,先把两部分分别排序好,再这两个有序部分归并成一个整体有序部分。通过这个归并思想用递归反复归并即可。
代码实现
void merge(int* arr, int left, int mid, int right) //归并函数 left左数组索引 mid右数组索引 right右边界索引 { int len = right - left + 1; int p1 = left; int p2 = mid; int* arrRes = (int*)malloc(sizeof(int) * len); int i = 0; while (p1 < mid && p2 < right + 1) { if (arr[p1] <= arr[p2]) //为了排序稳定,等于的情况要写在这里 { arrRes[i] = arr[p1]; p1++; } else { arrRes[i] = arr[p2]; p2++; } i++; } while (p1 < mid) { arrRes[i] = arr[p1]; p1++; i++; } while (p2 < right + 1) { arrRes[i] = arr[p2]; p2++; i++; } memcpy(&arr[left], arrRes, sizeof(int) * len); free(arrRes); } void sort(int* arr, int left, int right) { if (left >= right) //收敛条件 { return; } int mid = left + (right - left) / 2; sort(arr, left, mid); //左边排序 sort(arr, mid + 1, right); //右边排序 merge(arr, left, mid + 1, right); //两边归并 }
评价
很高效的算法,并且可以保持排序稳定,所以python和java内部对对象的排序都是用的这种,只不过还做了一些改进,
这篇关于归并排序算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-28一步到位:购买适合 SEO 的域名全攻略
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign学习入门:轻松掌握微服务通信
- 2024-12-27OpenFeign学习入门:轻松掌握微服务间的HTTP请求
- 2024-12-27JDK17新特性学习入门:简洁教程带你轻松上手
- 2024-12-27JMeter传递token学习入门教程
- 2024-12-27JMeter压测学习入门指南
- 2024-12-27JWT单点登录学习入门指南
- 2024-12-27JWT单点登录原理学习入门