【每日算法】归并排序
来源:互联网 发布:两组数据t检验 编辑:程序博客网 时间:2024/06/07 10:17
思路:
1、分解:将n个元素分成各含n/2个元素的子序列;
2、解决:用归并排序法对两个子序列递归地排序;3、合并:合并两个已排序的子序列以得到排序结果。
归并排序的时间复杂度为O(n logn),空间复杂度为O(n)。归并排序是稳定的
代码:void mergesort(int arr[], int l, int r){if (arr == NULL || l >= r)return;int m = (l + r) / 2;mergesort(arr, l, m);mergesort(arr, m, r);merge(arr, l, m, r);}void merge(int arr[], int l, int m,int r){int index_l = l, index_r = m + 1;int index_tmp = 0;int *tmp = new int[r - l + 1];while (index_l <=m&&index_r <= r){if (arr[index_l] <= arr[index_r])tmp[index_tmp++] = arr[index_l++];elsetmp[index_tmp++] = arr[index_r++];}while (index_l<=m)tmp[index_tmp++] = arr[index_l++];while (index_r<=r)tmp[index_tmp++] = arr[index_r++];for (int i = 0; i <= index_tmp; i++){arr[i] = tmp[i];}delete[] tmp;}举例:剑指offer中的《数组中的逆序对》、合并两个有序链表
阅读全文
0 0
- 【每日算法】归并排序
- 每日一算法之归并排序
- 排序算法-归并排序
- 排序算法------归并排序
- 排序算法-归并排序
- 排序算法---归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法-归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法:归并排序
- 排序算法-归并排序
- 排序算法:归并排序
- 【排序算法】归并排序
- 排序算法--归并排序
- 排序算法-归并排序
- 排序算法--归并排序
- AOJ2251: Merry Christmas 题解
- Kotlin:Google让我们使用Kotlin的理由
- js事件流与事件处理程序
- 好困#7
- 浅谈数据库事务
- 【每日算法】归并排序
- 黄金系统
- 剑指Offer面试题39二叉树的深度(以及判断平衡二叉树),面试题40数组中只出现一次的数字
- JavaScript中的this
- springmvc注解RequestBody和ResponseBody
- 丑数问题
- java基础
- 虚函数和纯虚函数的区别
- Python入门过程