归并排序
来源:互联网 发布:mysql front 5.3 破解 编辑:程序博客网 时间:2024/05/22 03:25
1.归并排序算法
归并排序,用到了分治思想,实现的时候用到递归算法。将整个大的数组的排序不断地分为两个小的数组的排序然后进行合并。
2.算法实现
采用递归
// created by YunaLin// 2017-09-14// mergeSort, using divide and conquer algorithm, resursion#include <iostream>using namespace std;const int MAX = 1000;int temp[MAX];void mergeSort(int* array, int min, int max);void combineSub(int* array, int min, int mid, int max);int main() { int n; cout << "the length of the array you want to sort: "; cin >> n; int array[MAX]; for (int i = 0; i < n; ++i) { cin >> array[i]; } mergeSort(array, 0, n - 1); for (int i = 0; i < n; ++i) { cout << array[i] << " "; } cout << endl; return 0;} void mergeSort(int* array, int min, int max) { // 注意结束条件的判断 if (min >= max) return; int mid = (min + max)/2; // 递归,时间复杂度为O(nlogn) mergeSort(array, min, mid); mergeSort(array, mid + 1, max); combineSub(array, min, mid, max);}void combineSub(int* array, int min, int mid, int max) { // 因为两个子数组已经是排序了的,所以只需要不断地比较第一个数, // 然后往后移动直到将所有的数字放到一个总的数组里面即可 int i = min, j = mid + 1, index = min; while (i <= mid && j <= max) { if (array[i] < array[j]) { temp[index++] = array[i++]; } else if (array[i] > array[j]) { temp[index++] = array[j++]; } else { temp[index++] = array[i++]; temp[index++] = array[j++]; } } while (i <= mid) { temp[index++] = array[i++]; } while (j <= max) { temp[index++] = array[j++]; } for (int i = min; i <= max; ++i) { array[i] = temp[i]; }}
3.时间复杂度
T(n)=2T(n/2) +O(n)
总的运行时间是O(nlogn).
阅读全文
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- CentOS7.3集群部署Hadoop2.8.1
- 块元素设置inline属性不能设置宽高的解决办法
- arguments的用法总结
- Hadoop学习-错误记录:TokenizerMapper not found
- PAT-乙级-1063. 计算谱半径
- 归并排序
- ACM-ICPC Asia Regional Changchun 1008 Sequence I(KMP)
- Java之IO自述
- android性能优化总体方向
- GDB简介
- MySQL安装及遇到的一系列问题
- 一道奇怪的分治问题
- Git学习记录<2>
- 事务的隔离级别