归并排序详细分析
来源:互联网 发布:js 获取选中radio 编辑:程序博客网 时间:2024/05/18 01:10
首先我们可以先想象一下,将两个有序的数组A、B合并成一个数组C有什么好的办法。我们只需从两个数组的第一位开始比较就可以了,但是到最后一定会有一个数组会剩下一些元素,我们只需将其全部连接到C后面就可以了,这样是不是很简单,而且时间效率也达到了O(n)。
//将有序数组a[]和b[]合并到c[]中void MemeryArray(int a[], int n, int b[], int m, int c[]){int i, j, k;i = j = k = 0;while (i < n && j < m){if (a[i] < b[j])c[k++] = a[i++];elsec[k++] = b[j++]; }while (i < n)c[k++] = a[i++];while (j < m)c[k++] = b[j++];}
解决了上面的合并有序数列问题,再来看归并排序,其的基本思路就是将数组分成二组A,B,如果这二组组内的数据都是有序的,那么就可以很方便的将这二组数据进行排序。如何让这二组组内数据有序了?
可以将A,B组各自再分成二组。依次类推,当分出来的小组只有一个数据时,可以认为这个小组组内已经达到了有序,然后再合并相邻的二个小组就可以了。这样通过先递归的分解数列,再合并数列就完成了归并排序。
//将有二个有序数列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++];elsetemp[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){int *p = new int[n];if (p == NULL)return false;mergesort(a, 0, n - 1, p);delete[] p;return true;}
归并排序的效率是比较高的,设数列长为N,将数列分开成小数列一共要logN步,每步都是一个合并有序数列的过程,时间复杂度可以记为O(N),故一共为O(N*logN)。因为归并排序每次都是在相邻的数据中进行操作,所以归并排序在O(N*logN)的几种排序方法(快速排序,归并排序,希尔排序,堆排序)也是效率比较高的。
0 0
- 归并排序详细分析
- 归并排序详细解析
- 归并排序算法分析
- 归并排序及其分析
- 归并排序分析
- 分析归并排序
- 算法分析:归并排序
- 分治法:归并排序分析
- 归并排序算法及分析
- 归并排序介绍与分析
- 归并排序时间复杂度分析
- 分析插入与归并排序
- 归并排序C++实现,详细注释
- 转——谈一谈归并排序(详细归并模板)
- 算法-排序-归并排序(MergeSort)分析
- 经典排序算法--归并排序算法分析
- 快速排序详细分析
- 排序--快速排序--详细分析
- ios调用相机之后状态栏消失
- 面向对象编程(OOP)
- C++对象模型——Default Constructor的建构操作(第二章)
- 第一次写博客
- 封装Recycleview.Adapter使Recycleview具有加载更多,item点击事件等功能
- 归并排序详细分析
- 基于配置的自定义的简单struts(了解struts原理)
- 设计模式--桥接模式
- 函数的默认参数的大坑,参数的可变参数
- iOS应用内付费(IAP)开发步骤列表
- ZOJ3452 Doraemon's Stone Game
- 206 矩形的个数
- 2015/07/29
- display 与 visible 属性比较