排序算法之归并排序
2016-07-16 20:10
190 查看
归并排序:
代码:
排序类别 | 排序方法 | 时间复杂度 | 空间复杂度 | 稳定性 | |||
平均情况 | 最坏情况 | 最好情况 | |||||
归并排序 | 归并排序 | O(nlog2n) | O(nlog2n) | O(nlog2n) | O(n) | 稳定 |
#include <iostream> #include <cstdio> using namespace std; void Merge(int Array[], int start, int mid, int end) { int i = start; int j = mid + 1; int k = 0; int temp[end - start + 1]; while(i <= mid && j <= end){ if(Array[i] <= Array[j]){ temp[k++] = Array[i++]; } else{ temp[k++] = Array[j++]; } } while(i <= mid){ temp[k++] = Array[i++]; } while(j <= end){ temp[k++] = Array[j++]; } for(int i = 0; i < k; i++){ Array[start+i] = temp[i]; } } void MergeSort(int Array[], int start, int end) { if(start >= end){ return ; } int mid = (start + end) >> 1; MergeSort(Array, start, mid); MergeSort(Array, mid+1, end); Merge(Array, start, mid, end); } int main() { int a[] = {1,3,6,5,9,2,8,7,0,4}; MergeSort(a, 0, 9); for(int i = 0; i < 10; i++){ cout << a[i] << " "; } }
相关文章推荐
- 一个关于if else容易迷惑的问题
- JavaScript演示排序算法
- 新注册
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- C#递归算法之分而治之策略
- 四大漏洞入侵博客
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#算法之大牛生小牛的问题高效解决方法
- 一道sql面试题附答案
- C#算法函数:获取一个字符串中的最大长度的数字
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- C# 超高面试题收集整理
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 在Ubuntu系统上安装Ghost博客平台的教程