排序算法之归并排序
2016-03-02 11:18
183 查看
//将有二个有序数列a[first...mid]和a[mid...last]合并。 void mergearray(int a[], int first, int mid, int last, int temp[]) { int i = first, j = mid + 1; int m = mid, n = last; int k = 0; while (i <= m && j <= n) { if (a[i] <= a[j]) temp[k++] = a[i++]; else temp[k++] = a[j++]; } while (i <= m) temp[k++] = a[i++]; while (j <= n) temp[k++] = a[j++]; for (i = 0; i < k; i++) a[first + i] = temp[i]; } void mergesort(int a[], int first, int last, int temp[]) { if (first < last) { int mid = (first + last) / 2; mergesort(a, first, mid, temp); //左边有序 mergesort(a, mid + 1, last, temp); //右边有序 mergearray(a, first, mid, last, temp); //再将二个有序数列合并 } } bool MergeSort(int a[], int n) { if (p == NULL) return false; int *p = new int ; mergesort(a, 0, n - 1, p); delete[] p; return true; }
归并排序的效率是比较高的,设数列长为N,将数列分开成小数列一共要logN步,每步都是一个合并有序数列的过程,时间复杂度可以记为O(N),故一共为O(N*logN)
相关文章推荐
- JSP默认HTML4改为HTML5
- android studio1.4新建工程运行出错
- 二叉树的构建以及先中后序遍历
- ArcGIS教程:设置地理处理环境
- 1059. Prime Factors (25)
- discuzX 3.1/2 如何重新安装
- QtGui继承关系树
- c++ 思考
- Spring/SpringMvc 配置文件常用标签解释
- android点点滴滴
- deepin linux系统 图像处理及机器学习开发环境配置方法
- 根据图片名获取ID
- mybatis-config.xml配置文件及sql分页查询的实现
- jquery在线引用地址
- 二维数组的查找
- 文章标题
- java对时间操作的常用总结
- Android系统架构
- Android: 保存键值集(SharedPreferences)
- 谷歌汽车出误判曝光 6大奇葩科技更牛