[排序算法] 归并排序
来源:互联网 发布:手机微信连不上网络 编辑:程序博客网 时间:2024/06/07 22:52
归并排序
【思想】
·简单地将原始序列划分为两个子序列
·分别对每个子序列递归排序
·最后将排好序的子序列合并为一个有序序列,即归并过程
【特点】稳定
空间代价:O(n)
时间代价:O(nlogn)
注:
·尽管归并排序最坏比较次数比快速排序少,但它需要更多地元素移动,因此它在实用中不一定比快速排序快
·一般二路归并算法需要另外一个存储空间来存储排好序的数组,空间复杂度为O(n)
二路归并算法(需要另外存储空间)
1 void Merge(int array[], int left, int middle, int right, int temp[]) 2 { 3 int i = left,j = middle + 1,k = 0; 4 while(i <= middle && j <= right) 5 { 6 if(array[i] > array[j]) 7 { 8 temp[k ++] = array[j ++]; 9 }10 else11 {12 temp[k ++] = array[i ++];13 }14 }15 while(i <= middle)16 {17 temp[k ++] = array[i ++];18 }19 while(j <= right)20 {21 temp[k ++] = array[j ++];22 }23 for(int p = 0;p < k;p ++)24 {25 array[left + p] = temp[p];26 }27 }28 void MergeSort(int array[], int left, int right)29 {30 if (left < right)31 {32 int *temp = new int[right - left + 1];33 int middle = (left+right)/2;34 MergeSort(array, left, middle);35 MergeSort(array, middle + 1, right);36 Merge(array, left, middle, right,temp);37 }38 }
阅读全文
0 0
- 排序算法-归并排序
- 排序算法------归并排序
- 排序算法-归并排序
- 排序算法---归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法-归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法:归并排序
- 排序算法-归并排序
- 排序算法:归并排序
- 【排序算法】归并排序
- 排序算法--归并排序
- 排序算法-归并排序
- 排序算法--归并排序
- 排序算法:归并排序
- 【排序算法】归并排序
- gpgpu-sim/remulator 安装
- [排序算法] 基数排序
- 小型计算器
- [排序算法] 各种排序算法(内排序)的比较及选择依据
- HTML常用符号整合
- [排序算法] 归并排序
- 判断当前线程是否UI线程
- [剑指Offer] 24.二叉树中和为某一值的路径
- [剑指Offer] 25.复杂链表的复制
- Java 类加载器-简单
- [问题解决] multiple definition of `***'
- [剑指Offer] 26.二叉搜索树与双向链表
- 回流与重绘
- [剑指Offer] 27.字符串的排列