排序算法之归并排序
2016-11-28 21:52
253 查看
归并排序>
之前曾经实现过堆排序,它用到了完全二叉树,但是堆的设计本身就是比较复杂的,而今天要实现的归并排序同样的也用到了完全二叉树的思想,这种思想比堆排序较为简单.
归并排序是利用归并的思想实现的排序算法.它的思路是:我们将具有n个序列的无序的数组序列两两合并排序后再合并,最终获得了一个有序的数组.
归并排序的实现也极其简单:
1).将这个数组分成两个区间.[start,mid],[mid+1,end].
2).从这两个区间中找到较小的值按照顺序放入暂存数组tmp中.
3).如果有区间中的数据没有放入暂存数组中则放入.
4).因为是将区间中较小的值放入暂存数组tmp中,所以最后tmp中的值是有序的,只需要将tmp中的值拷入数组a 中即可
归并排序的优化类似之前实现的快速排序的优化:当数据小于13的时候直接插入,当较大的时候用归并排序,这样就增加了归并排序的效率.
归并排序适合于外排序,它的时间复杂度为O(N*lgN).
在这里就分享结束啦~~~
之前曾经实现过堆排序,它用到了完全二叉树,但是堆的设计本身就是比较复杂的,而今天要实现的归并排序同样的也用到了完全二叉树的思想,这种思想比堆排序较为简单.
归并排序是利用归并的思想实现的排序算法.它的思路是:我们将具有n个序列的无序的数组序列两两合并排序后再合并,最终获得了一个有序的数组.
归并排序的实现也极其简单:
1).将这个数组分成两个区间.[start,mid],[mid+1,end].
2).从这两个区间中找到较小的值按照顺序放入暂存数组tmp中.
3).如果有区间中的数据没有放入暂存数组中则放入.
4).因为是将区间中较小的值放入暂存数组tmp中,所以最后tmp中的值是有序的,只需要将tmp中的值拷入数组a 中即可
void _MergeSort(int *a,int *tmp,int start,int end) { int mid=start+((end-start)>>1); if(start < mid) _MergeSort(a,tmp,start,mid); if(mid+1 < end) _MergeSort(a,tmp,mid+1,end); //分成两个区间 [start,mid]和[mid+1,end] int start1=start; int end1=mid; int start2=mid+1; int end2=end; int index=start; //从两个区间中选择最小的放入tmp中 while (start1 <= end1 && start2 <= end2) { if(a[start1] < a[start2]) tmp[index++]=a[start1++]; else tmp[index++]=a[start2++]; } while (start1 <= end1) { tmp[index++]=a[start1++]; } while (start2 <= end2) { tmp[index++]=a[start2++]; } //将tmp中的数据写入a中 for (int i=start;i<index;++i) { a[i]=tmp[i]; } } void MergeSort(int *a,int start,int end) { int *tmp=new int[end-start+1]; _MergeSort(a,tmp,start,end); delete []tmp; }
归并排序的优化类似之前实现的快速排序的优化:当数据小于13的时候直接插入,当较大的时候用归并排序,这样就增加了归并排序的效率.
归并排序适合于外排序,它的时间复杂度为O(N*lgN).
在这里就分享结束啦~~~
相关文章推荐
- 排序算法(堆排序,归并排序,快速排序、选择排序、直接插入排序)
- 【排序算法】之归并排序
- 排序算法之归并排序(模板类)
- 排序算法--归并排序
- 排序算法——归并排序
- 排序算法总结-Shell排序、归并排序、快排、堆排
- [排序算法] 归并排序
- 排序算法之归并排序
- 排序算法——归并排序
- c/c++常用算法(12) -- 基本排序算法(归并排序)
- 排序算法详解【归并排序-Merge_Sort】
- 算法分析中最常用的几种排序算法(插入排序、希尔排序、冒泡排序、选择排序、快速排序,归并排序)C 语言版
- 常用排序算法(七)归并排序
- 软考之排序算法(四)——归并排序、基数排序
- 排序算法Python(冒泡、选择、快速、插入、希尔、归并排序)
- 经典的排序算法--归并排序
- 排序算法(Java实现):Shell排序和归并排序
- 排序算法总结(二)-------选择,堆,冒泡,快速,归并排序(java实现)
- 排序算法之快速排序和归并排序
- 排序算法总结(4)——归并排序、基数排序