复杂度nlog(n)之归并排序
来源:互联网 发布:蓝牙耳机配对软件 编辑:程序博客网 时间:2024/06/08 14:31
1.简单的介绍
2.核心的merge函数
/** * 将分割开的两个数组合并,[start,middle]和[middle+1,end]这两个数组合并成为一个新的排序数组 * @param array * @param start * @param middle * @param end */ public static void merge(int[] array,int start,int middle,int end) { int [] temp=new int[end-start+1]; int k=0; int start1=start; int end1=middle; int start2=middle+1; int end2=end; while(start1<=end1&&start2<=end2) { if(array[start1]<=array[start2]) { temp[k++]=array[start1++]; }else { temp[k++]=array[start2++]; } } while(start1<=end1) { temp[k++]=array[start1++]; } while(start2<=end2) { temp[k++]=array[start2++]; } for(int i=0;i<k;i++) { array[start+i]=temp[i]; } }
上面函数就是数组被递归分割后的两个数组,将他们重新拼成一个排序数组。
3.完整的代码
public static void mergesort(int[] array,int start,int end) { if(start<end) { int middle=(start+end)/2; mergesort(array, start, middle); mergesort(array, middle+1, end); merge(array, start, middle, end); } }
归并算法大致就是利用不停地递归不停地将数组一分为二,知道他们被分成一个一个的。然后再回溯不停地合并,最终将他们变成一个排序数组。
0 0
- 复杂度nlog(n)之归并排序
- 复杂度nlog(n)之快速排序
- 复杂度nlog(n)之堆排序
- 归并排序、快速排序---时间复杂度为O(nlog n)的排序方式
- 插入排序复杂度为什么不是nlog(n)
- 百度笔试题之归并排序总结----空间复杂度为O(m+n)的归并排序与空间复杂度为O(1)的归并排序
- 快速排序改进版,时间复杂度为:O(nk+nlog(n/k))
- 堆排序(O(nlog(n))
- 8大排序之 ---------归并排序 与时间复杂度
- 矩阵就地转置+O(Nlog(N))时间复杂度
- 排序算法之 归并排序 及其时间复杂度和空间复杂度
- 归并排序的空间复杂度为什么是O(n)?快速排序的空间复杂度为什么是O(log2n)?
- Leetcode中常用排序 之 O(n)时间复杂度排序
- 归并排序时间复杂度分析
- 快速排序——非稳定排序nlog(n)
- [逆序数]用归并排序求逆序数。时间复杂度(n*logn)
- 人人都来写算法 之 归并有序数组,(要求:利用原数组,且时间复杂度O(n)
- 复杂度为n的排序
- 用Jplayer做的一个带动画的播放器
- 最小树形图
- 小希的礼物
- Objective c中的锁 NSLock,NSConditionLock,NSRecursiveLock
- 整数在内存中的表达
- 复杂度nlog(n)之归并排序
- 文件系统缓存dirty_ratio与dirty_background_ratio两个参数区别
- Git 一篇搞定基本操作
- vector::begin
- 【Mariadb】centos7搭建mariadb Galera集群
- 【Linux】进程的创建fork()和vfork()
- 解决磁盘io紧张的一种临时方法
- Android提高启动速度的实现方法 7.23
- 173. Binary Search Tree Iterator