算法的一些小栗子4(归并排序)

来源:互联网 发布:会员视频源码 编辑:程序博客网 时间:2024/05/17 08:16

归并排序

//归并排序public class MergeSort {    public void sort(int[] a,int left,int right){        if(left<right){            int middle=(left+right)/2;            sort(a,left,middle);            sort(a,middle+1,right);            merge(a,left,middle,right);//合并        }    }    private void merge(int[] a, int left, int middle, int right) {        int [] tempArray = new int[a.length];        int rightStart=middle+1;        int temp = left;        int third = left;        //比较两个小数组相应下标位置的数组大小,小的先放进数组        while(left<=middle&&rightStart<=right){            if(a[left]<=a[rightStart]){                tempArray[third++]=a[left++];            }else{                tempArray[third++]=a[rightStart++];            }        }        //把左边数组剩余的元素放进数组        while (left<=middle){            tempArray[third++]=a[left++];        }        //把右边数组剩余的元素放进数组        while (rightStart<=right){            tempArray[third++]=a[rightStart++];        }        while (temp<=right){            a[temp]=tempArray[temp++];        }    }    public static void main(String[] args){        int[] a={34,12,15,77,64,28,98,38,10,8,49};        System.out.println("排序之前:");        for (int i = 0; i < a.length; i++) {            System.out.print(a[i] + " ");        }        System.out.println();        System.out.println("=================================");        MergeSort mergeSort = new MergeSort();        mergeSort.sort(a,0,a.length-1);        System.out.println("排序之后:");        for (int i = 0; i < a.length; i++) {            System.out.print(a[i] + " ");        }    }}