「算法导论」:归并排序
2014-06-30 21:07
302 查看
时间复杂度:o(nlgn)
空间复杂度:s(n)
代码:
空间复杂度:s(n)
代码:
/************************************************************************* > File Name: merge_sort.cpp > Author sangoly > Mail: sangoly@aliyun.com > Created Time: 2014年06月30日 星期一 20时32分44秒 ************************************************************************/ #include<iostream> #include<limits> using namespace std; void merge(int list[], int start, int middle, int end) { int llen = middle - start + 1; int rlen = end - middle; int* larr = new int[llen + 1]; int* rarr = new int[rlen + 1]; int i, j; for (i = 0; i < llen; i++) { larr[i] = list[start + i]; } for (j = 0; j < rlen; j++) { rarr[j] = list[middle + 1 + j]; } // Add the guard larr[llen] = numeric_limits<int>::max(); rarr[rlen] = numeric_limits<int>::max(); i = j = 0; for (int k = start; k <= end; k++) { if (larr[i] <= rarr[j]) list[k] = larr[i++]; else list[k] = rarr[j++]; } delete [] larr; delete [] rarr; } void merge_sort(int list[], int start, int end) { if (start >= end) return; int middle = (start + end) / 2; merge_sort(list, start, middle); merge_sort(list, middle + 1, end); merge(list, start, middle, end); } int main() { int list[8] = {5, 10, 4, 7, 1, 15, 2, 6}; merge_sort(list, 0, 7); for (int i = 0; i < 8; i++) cout<<list[i]<<" "; cout<<endl; return 0; }
相关文章推荐
- 算法导论-归并排序
- MIT:算法导论——1.算法分析——插入排序 vs 二路归并排序
- 【算法导论】C++参考源码之线性时间排序
- 【算法之美】你可能想不到的归并排序的神奇应用 — leetcode 327. Count of Range Sum
- 算法-归并排序
- 白话经典算法系列之五 归并排序的实现
- 白话经典算法系列之五 归并排序的实现
- 算法导论_选择排序
- 白话经典算法系列之五 归并排序的实现
- 算法导论 第9章 排序和顺序统计学算法导论
- 实现一个简单的c++ list容器(含sort排序 链表归并算法实现)
- Java算法之排序(快速,冒泡,归并,选择)
- 算法导论-8-3-排序不同长度的数据项
- 经典算法系列二-归并排序
- 白话经典算法系列之五 归并排序的实现
- 线性时间排序之计数排序(算法导论8.2)
- 排序--归并算法思想及其代码实现
- 【算法导论】C++参考源码之基础排序
- java中的排序算法——归并排序
- 算法学习笔记----归并排序