算法——归并排序
来源:互联网 发布:淘宝立即购买灰色 编辑:程序博客网 时间:2024/03/29 07:25
public class Merge { private static Comparable[] aue; public static void sort(Comparable[] a){ aue = new Comparable[a.length]; sort(a,0,a.length-1); } public static void sort(Comparable[] a,int lo,int hi){ if(hi <= lo ) return; int mid = (lo + hi)/2; sort(a,lo,mid); sort(a,mid+1,hi); merge(a,lo,mid,hi); } public static void merge(Comparable[] a,int lo,int mid,int hi){ int i = lo; int j = mid + 1; for(int k = lo; k <= hi;k++){ aue[k] = a[k]; } for(int k = lo; k <= hi;k++){ if( i > mid) a[k] = aue[j++]; else if( j > hi) a[k] = aue[i++]; else if(less(aue[j],aue[i])) a[k] = aue[j++]; else a[k] = aue[i++]; } } public static boolean less(Comparable v,Comparable w){ return v.compareTo(w) < 0; } public static void echo(Comparable[] a,int i,int j){ Comparable t = a[i]; a[i] = a[j]; a[j] = t; } public static void show(Comparable[] a){ for(int i = 0; i < a.length;i++ ){ System.out.print(a[i] + " "); } } public static boolean isSorted(Comparable[] a){ for(int i = 1; i < a.length;i++){ if(less(a[i],a[i-1])) return false; } return true; } public static Comparable[] Random(int num){ Integer[] a = new Integer[num]; Random rand = new Random(); for(int i = 0;i<num;i++){ a[i] = rand.nextInt(100000); } return a; } public static void main(String[] args) { Comparable[] a = Selection.Random(2000000); /*show(a);*/ Long start = System.currentTimeMillis(); sort(a); Long end = System.currentTimeMillis(); System.out.println("Time is " + (end - start)); /*show(a);*/ }}
思路:利用分治思想,把大问题拆分为小问题,然后通过小问题的答案来解决大问题的答案, 归并重点是分为两步,一个是拆分,通过递归不断的对半分,直到划分为一个数时就返回,另一个是合并,通过增加一个额外的数组,长度为N,利用循环进行4个判断,左半部分用尽就用右半部,反之亦然,右半边小于左半边的情况和右半边大于左半边的情况,这里要注意j=mid + 1,一定要加1,这样mid会往右边偏移,才不会出错。
0 0
- 排序算法—归并排序
- 排序算法—归并排序
- 算法——归并排序
- 算法 —— 归并排序
- 算法——归并排序
- 算法——归并排序
- 算法——归并排序
- 排序算法总结——归并排序
- 经典排序算法——归并排序
- 排序算法——归并排序
- 排序算法——归并排序
- 排序算法——归并排序
- 算法——排序之归并排序
- 排序算法——归并排序
- 排序算法系列——归并排序
- 【排序算法】——归并排序
- 排序算法——归并排序
- 经典排序算法——归并排序
- library cache pin的简单的场景重现
- [Android][N/A][SMS]PDU解析——利用AT指令发送CLASS分类短信
- 霍夫曼编码压缩
- 蓝桥杯 ALGO-105 黑色星期五(日期)
- WindowsPhone开发如何创建动态启动界面
- 算法——归并排序
- proc_day01
- 算法之美
- iOS系统的一些单例类
- proc_day02
- android开发错误之“ Connection with adb was interrupted”
- 5.8在Mifare S50中,如果第2区的访问控制码为FF 08 70 69,则该区块1和3的访问控制条件是什么
- ImageCache 图片缓存强引用
- proc_day03