二路归并排序
来源:互联网 发布:f网络用语意思是什么 编辑:程序博客网 时间:2024/06/07 04:43
递归实现
时间复杂度:O(nlgn)空间复杂度:O(1)
http://m.blog.csdn.net/allen_fan_11/article/details/9097019
思路总结:(1)先递归分割(2)再合并(把两个有序数组进行排序合并)#include<stdio.h>void merge(int arr[], int l, int mid, int r) //合并{ int i = l; int j = mid + 1; int *t = new int[r - l + 1]; //开辟一个辅助数组t int k = 0; while (i <= mid && j <= r) //依次比较,取小值存入t[k] { if (arr[i] < arr[j]) { t[k++] = arr[i++]; } else t[k++] = arr[j++]; } while (i <= mid) //当其中一个数组遍历完成,把剩下的全部接过去 { t[k++] = arr[i++]; } while (j <= r) { t[k++] = arr[j++]; } for (k = l,i = 0; i < r - l + 1; i++) //把整个t数组拷贝给arr { arr[k] = t[i]; k++; }}void MergeSort(int arr[], int l, int r) //递归分割{ if (l < r) { int q = (l + r) / 2; MergeSort(arr, l, q); MergeSort(arr, q + 1, r); merge(arr, l, q, r); }}int main(){ int arr[] = { 71, 61, 42, 8, 9, 3, 2 }; //数组长度 = 数组元素的总个数 int length = sizeof(arr) / sizeof(arr[0]); //传入的l,r是数组的下标值,因此是0和length-1 MergeSort(arr, 0, length - 1); for (int i = 0; i < length; i++) printf("%5d", arr[i]); printf("\n");}
阅读全文
0 0
- 归并排序:二路归并
- 归并排序--二路归并
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 使用python把pdf转换为word然后替换word中的文字内容
- [转]easyui combobox设置选中
- 第二周 项目1 C++的三种参数传递的方法
- ThinkPHP 解决模板文件大小写问题
- 第9周 指针练习:MyMax
- 二路归并排序
- Codeforces Round #433 D
- 如何自建网站(2)
- .net分布式压力测试工具(Beetle.DT)
- 域名遍历搜索python实现
- 比较全面的druid配置信息
- [转]Cassnadra3.X 特性概述
- chown -R 用户名:组名 ./ 及 chown用法介绍
- 判断文件是否为图片