几种常用的高效排序(三)---归并排序
来源:互联网 发布:影视特技软件 编辑:程序博客网 时间:2024/04/29 02:27
归并排序是一种十分实用的排序方式,因为它很好的诠释了分治的思想,而且往往在归并排序的过程中可以做一些其他的操作,实现一些十分精妙的算法
归并排序的思想就是每一次将序列分成两部分,递归的解决问题,递归回溯时这两部分内容分别是有序的,然后同过他们o(n)地构建新的有序序列,因为每次分成两部分,所以是进行log次,所以总复杂度nlogn
-------------------------归并算法的代码实现---------------------------------------------------------------
int a[2][MAX];void mergeSort ( int left , int right , int flag = 0 ){ if ( left == right ) return; int mid = left + right >> 1; mergeSort ( left , mid , flag^1 ); mergeSort ( mid+1 , right , flag^1 ); int p = left , p1 = left , p2 = mid+1; while ( p <= right ) { if ( p1 == mid+1 || ( a[flag^1][p2] < a[flag^1][p1]&& p2 <= right ) ) a[flag][p++] = a[flag^1][p2++]; else a[flag][p++] = a[flag^1][p1++]; }}
这副代码要在开始的时候对数组的两维附上同样的值;
下面是讲解:就是一直均分序列,直到序列长度为一时,向上回溯,每次利用两个指针,因为两个序列是有序的,所以只比较指针指向的队首,就可以o(n)的将当前队列变成有序的,然后回溯到原始序列即可,我使用的是滚动数组,能有效的简短代码长度,并且节约空间
0 0
- 几种常用的高效排序(三)---归并排序
- 几种常用的高效排序(一)--快排
- 几种常用的高效排序(二)--堆排
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 归并排序 -- 高效、稳定的排序算法
- 排序三(归并排序)
- 归并排序的几种变形
- 几种高效的字符串排序
- 归并排序和几种内部排序的比较
- 排序(三)---归并排序
- 常用的几种排序
- 几种基本排序的实现:选择排序,冒泡排序,插入排序,堆排序,快速排序,归并排序
- java常用的几种排序(冒泡排序 选择 插入排序 /快速排序)
- (二)几种排序算法的学习总结(归并排序)
- 几种常用的排序算法(快速排序,希尔排序,堆排序,选择排序,冒泡排序)
- 几种常见的排序算法(插入排序,希尔排序,归并排序和快速排序)——希尔排序
- 从排序开始(三)归并排序
- 排序算法(三):归并排序
- 整数解
- 5个最优秀的Java和C#代码转换工具
- iOS为什么比android优秀
- 轻聊网络编程
- NP完全问题
- 几种常用的高效排序(三)---归并排序
- 将java源码打成jar包
- 理解AngularJS——从WPF说起
- 大话 AOP利器ASM
- 初出茅庐之OC总结笔记(第一篇)
- mac安装nginx
- UI初学者之UIImageView类别扩展来实现异步加载缓存和读取
- EDA实验笔记一
- UITextField的基础使用方法