【算法】排序算法第四讲:归并排序
来源:互联网 发布:淘宝怎么做全屏海报 编辑:程序博客网 时间:2024/06/05 00:37
插入排序,链接戳这里:http://blog.csdn.net/chaseraod/article/details/75091908
选择排序,链接戳这里:http://blog.csdn.net/chaseraod/article/details/75092407
交换排序,链接戳这里:http://blog.csdn.net/chaseraod/article/details/75094970
本文是常见排序算法的最后一讲,归并排序。
基本思想:设两个有序的子序列(相当于输入序列)放在同一序列中相邻的位置上:array[low..m],array[m + 1..high],先将它们合并到一个局部的暂存序列 tmp (相当于输出序列)中,待合并完成后将 tmp 复制回 array[low..high]中,从而完成排序。
如图:
代码:
void Merge(int* a, int* tmp, int begin1, int end1, int begin2, int end2){ size_t pos = begin1; size_t index = begin1; while (begin1 <= end1 && begin2 <= end2) { if (a[begin1] < a[begin2]) tmp[index++] = a[begin1++]; else tmp[index++] = a[begin2++]; } while (begin1 <= end1) { tmp[index++] = a[begin1++]; } while (begin2 <= end2) { tmp[index++] = a[begin2++]; } memcpy(a + pos, tmp + pos, sizeof(int)*(end2 - pos + 1));}void _MergeSort(int* a, int* tmp, int left, int right){ if (left >= right) return; int mid = left + (right - left) / 2; // 0 0 1 1 // [left mid] [mid+1, right] _MergeSort(a, tmp, left, mid); _MergeSort(a, tmp, mid + 1, right); Merge(a, tmp, left, mid, mid + 1, right);}void MergeSort(int* a, size_t n){ assert(a); int* tmp = new int[n]; _MergeSort(a, tmp, 0, n - 1); delete[] tmp;}
测试:
int main(){ int a[] = { 1, 5, 3, 2, 8, 0, 7, 9, 4, 6 }; int sz = sizeof(a) / sizeof(a[0]); MergeSort(a,sz); for (int i = 0; i < sz; i++) { cout << a[i] << " "; } cout << endl; system("pause\n"); return 0;}
运行结果:
阅读全文
1 0
- 【算法】排序算法第四讲:归并排序
- 算法 第四版 归并排序
- 《算法(第四版)》排序-----归并排序
- 算法 第四版---2.2归并排序
- MIT算法导论-第四讲-快速排序
- 排序算法-归并排序
- 排序算法------归并排序
- 排序算法-归并排序
- 排序算法---归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法-归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法:归并排序
- 排序算法-归并排序
- 排序算法:归并排序
- 【排序算法】归并排序
- Leetcode Palindrome Permutation I & II
- 文章标题
- org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'XXXX' is defined
- 欢迎使用CSDN-markdown编辑器
- scrapy爬虫基础知识
- 【算法】排序算法第四讲:归并排序
- express入门(3)-静态文件
- 最全面的Java多线程用法解析
- 阿里巴巴社招内推:534663231
- General List
- MVN常用指令
- java的条件结构以及流程控制
- C Primer Plus(第6版)第六章答案
- CF Round #424( Div.2) C. Jury Marks 【思维+STL】