算法——归并排序-Java


public class MergeSort {
    public static void main(String[] args) {
        int a[]={10,9,8,7,6,5,4,3,2,1};
        mergeSort(a,0, a.length-1);
        for(int i=0;i< a.length;i++){
            System.out.print(a[i]+" ");
        }

    }

    //归并并排序
    public static void mrge(int[] a,int left,int mid,int right){
        int[] temp = new int[a.length];
        int p1=left;
        int p2=mid+1;
        int p3=0;
        while(p1<=mid&&p2<=right){
            temp[p3++]=(a[p1]>=a[p2])?a[p1++]:a[p2++];//这里可以该从小到大还是从大到小
        }
        while(p1<=mid){
            temp[p3++]=a[p1++];
        }
        while(p2<=right){
         temp[p3++]=a[p2++];
        }

        //临时的数组复制到原先的数组
        for(int i=0;i<p3;i++){
            a[left+i]=temp[i];
        }
    }

    //把数组分成子序列
    public static void mergeSort(int[] a,int left,int right){//这个方法是要调用的
        if(left<right){//数组元素不是一个的情况
            int mid=(left+right)/2;
            mergeSort(a,left,mid);
            mergeSort(a,mid+1,right);
            mrge(a,left,mid,right);
        }
    }

}

上一篇:利用指针判断大小端模式


下一篇:1515: PIPI的开关Ⅱ 题解(优先队列维护中位数)