归并排序
来源:互联网 发布:扫描编辑软件 编辑:程序博客网 时间:2024/06/07 06:39
1、复杂度分析
总的时间复杂度为O(nlogn),而且这是归并排序算法中最好、最坏、平均的时间性能。
由于归并排序在归并过程中需要与原始序列同样数量的存储空间存放归并结果以及递归时深度为这里写图片描述的栈空间,因此空间复杂度为O(n+logn).
另外,对代码进行仔细研究,发现merge函数中有if (a[i] < a[j]) 的语句,说明它需要两两比较,不存在跳跃,因此归并排序是一种稳定的排序算法。
也就是说,归并排序是一种比较占内存,但却效率高且稳定的算法。
2.源码实现
package edu.liangman.offer;/** * Created by lm on 2016/12/31. */public class Guibin { public static void mearge(int arr[],int begin,int mid,int end){ int i = begin; //待排序局部下标开始下标 int j = mid + 1;//待排序局部下标开始下标 int[] temp = new int[end-begin+1];// 缓存数组 int n = 0;//缓存数组的下标值 while(i<=mid&&j<=end){ if(arr[i]<=arr[j]){ temp[n++] = arr[i++] ; } else{ temp[n++] = arr[j++] ; } } while(i<=mid){ temp[n++]=arr[i++]; } while(j<=end){ temp[n++]=arr[j++]; } for(int k= 0;k<n;k++){ arr[begin+k]= temp[k] ; } } public static void guibin(int[] arr,int begin,int end){ if(begin<end){ int mid = (begin+end)/2; guibin(arr,begin,mid); guibin(arr,mid+1,end); mearge(arr,begin,mid,end); } } public static void main(String[] args){ int arr[] = {1,3,5,6,2,4,7,1,123,345,234234}; //mearge(arr,0,3,arr.length-1); guibin(arr,0,arr.length-1); for(int i=0;i<arr.length;i++){ System.out.println(arr[i]); } }}
3.运行结果
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- jsp+javabean+servlet实现增删改查
- mysql常用sql
- Android中的软件Watchdog
- 【12月英语——快乐中学习】
- iOS开发地图应用,模拟器不询问我是否能获得定位权限
- 归并排序
- 安卓访问浏览器数据
- 2017年度学习计划之一起快乐学习数据分析
- 为什么c语言第一个数组元素要从a[0]开始数起,不从a[1]数起呢?
- Java Swing简单样例
- 电子纸上位机C#
- poj 2201 笛卡尔树
- 40 个很有用的 Mac OS X Shell 脚本和终端命令
- 调整数组顺序使奇数位于偶数前面