归并排序
2016-04-03 15:40
190 查看
基本思想
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
将一个数组分为越来越小的子列表,每个子列表单独进行排序,然后合并形成更大的有序列表。
通过归并子列表元素来合并子列表就是归并排序(Merge Sort)
代码实现
package com.csdhsm.sort; public class MergeSort { public void sort(int[] arr,int low,int high){ int mid = (low + high)/2; if(low < high){ sort(arr,low,mid); sort(arr,mid+1,high); mergeSort(arr,low,mid,high); } } private void mergeSort(int[] arr,int low,int mid,int high){ /** * 用于存放归并好的数组 */ int[] copyArr = new int[high - low + 1]; int i = low; int j = mid + 1; int k = 0; /** * 比较两个有序序列 */ while(i<=mid&&j<=high){ if(arr[i] <= arr[j]){ copyArr[k] = arr[i]; i++; }else{ copyArr[k] = arr[j]; j++; } k++; } /** * 下面两个循环只会执行一个 */ while(i<=mid){ copyArr[k] = arr[i]; i++; } while(j<=high){ copyArr[k] = arr[j]; j++; } for(i=0;i<=k;i++){ arr[low+i] = copyArr[i]; } } }
效率分析
稳定空间复杂度:O(n)
时间复杂度:O(nlog2n)
最坏情况:O(nlog2n)
最好情况:O(nlog2n)
相关文章推荐
- 3Ddungeon-------三维搜索-----偷个懒 把 亡命逃窜 的代码修改了一下 拿来用了
- test
- libiconv编程API
- AQS(4):condition
- CSS --- 圣杯布局
- 第六周项目四 静态成员的应用
- 机器学习:贝叶斯总结_3:线性回归和贝叶斯回归
- Spark Streaming Backpressure分析
- HDU1257:最少拦截系统
- AQS(3):release
- 如何利用线程的生命周期使小球撞墙弹回
- 05_hibernate延迟加载
- 【粤拼】手工整理《岳阳楼记》
- AQS(2):acquire
- Android Studio安装与配置
- implode() 和 explode()
- BZOJ 1022 SHOI2008 小约翰的游戏John 博弈论
- 96. Unique Binary Search Trees
- Server.MapPath方法的应用方法
- Tsinsen A1107 比赛安排