归并排序
来源:互联网 发布:淘宝系统架构 编辑:程序博客网 时间:2024/06/14 22:39
归并排序:
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。
时间复杂度:
O(N*lgN)
空间复杂度:
O(N) 需要额外空间
性能:
稳定
例:
步骤:
1.主要经历了两个阶段,一个是将无序区间分割成一个一个小区间
2.将分割的小区间依次归并成一个有序的区间
PS:
归并的数据保存在临时空间,最后将临时空间的数据拷贝回原数组,即实现归并。
时间复杂度:
O(N*lgN)
空间复杂度:
O(N) 需要额外空间
性能:
稳定
例:
步骤:
1.主要经历了两个阶段,一个是将无序区间分割成一个一个小区间
2.将分割的小区间依次归并成一个有序的区间
PS:
归并的数据保存在临时空间,最后将临时空间的数据拷贝回原数组,即实现归并。
void Merge(int* temp, int* arr, int left, int right);void MergeSort(int* arr, size_t n){assert(arr);int* temp = new int[n]; //开辟同样大小的临时空间assert(temp);int i = 0;for (i = 0; i < n; ++i){temp[i] = 0; //初始化}Merge(temp, arr, 0, n-1); //闭区间delete[] temp;}//归并排序void Merge(int* temp, int* arr, int left, int right){int mid = left + ((right - left) >> 1);if (left >= right){return;}Merge(temp, arr, left, mid); //分割左区间Merge(temp, arr, mid+1, right); //分割右区间//此时走到这里,arr已经被划分为一个个小区间//归并到临时区间int begin1 = left;int end1 = mid;int begin2 = mid+1;int end2 = right;int index = 0;while ((begin1 <= end1) && (begin2 <= end2)){//两个区间的值做比较,按从小到大排列if (arr[begin1] <= arr[begin2]){temp[index++] = arr[begin1++]; //此时begin1中的值小,所以先将该数据插入temp}else if (arr[begin1] > arr[begin2]){temp[index++] = arr[begin2++];}}//出了该循环,可能是一个条件不满足,或者是两个都不满足,需要判断//而且不可能两个条件都满足,所以先后顺序无影响while (begin1 <= end1){temp[index++] = arr[begin1++];}while (begin2 <= end2){temp[index++] = arr[begin2++];}//此时,数组元素已经全部排序完毕,需要拷贝回原数组int i = 0;for (i = 0; i < index; ++i){arr[left+i] = temp[i];cout << arr[left+i]<<" ";}cout << endl;}
void Test(){int arr[] = { 1, 5, 7, 0, 9, 3, 222, 67, 89, 56, 32, 12 };size_t n = sizeof(arr) / sizeof(arr[0]);MergeSort(arr, n);}int main(){Test();system("pause");return 0;}
阅读全文
4 1
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- Kotlin Reference (五) Packages
- SAP ERP系统业务优化之采购订单追踪
- kubernetes学习记录(5)——服务发现机制与Cluster DNS的安装(无CA认证版)
- 使用job自动抓取网页数据发送邮件,以springboot服务启动
- Oracle序列
- 归并排序
- h5 video 追加
- Springmvc工作流程
- hdu6052 To my boyfriend 枚举
- SAP ERP业务优化之非计划运输成本核算
- sqlserver和oracle常用函数对比
- 《应用拆分与平台搭建最佳实践》- 服务化的权限
- mysqldump备份(全量+增量)方案操作记录
- Js中Date的格式化扩展