分治法--归并排序算法

1.归并排序(Merge Sort)算法完全依照了分治模式

-分解:将n个元素分成n/2个元素的子序列

-解决:将两个子序列递归的排序

-合并:合并两个已经排好序的子序列以得到排序的结果

2.和快排不同的是

-归并的分解较为随意

-重点是合并

package 分治法;

import java.util.Arrays;

public class 归并排序 {
    public static void main(String[] args) {
        int []arr=new int[]{5,3,2,4,6,7,10};
        System.out.println(Arrays.toString(arr));
        mergeSort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }

    private static void mergeSort(int[] A, int p, int r) {
        if(p>1);
            mergeSort(A,p,mid);
            mergeSort(A,mid+1,r);
            merge(A,p,mid,r);
        }
    }
    private static void merge(int[] A, int p, int mid, int r) {
        int[] helper=new int[A.length];
        //先把A中的数据拷贝到helper中
        System.arraycopy(A,p,helper,p,r-p+1);
        int left=p;//左侧队伍的头部指针指向待比较的元素
        int right=mid+1;//右侧队伍的头部指针指向待比较的元素
        int current=p;//原数组的指针,指向待填入数据的位置
        while(left<=mid&&right<=r){
            if(helper[left]<=helper[right]){
                A[current]=helper[left];
                current++;
                left++;
            }else{
                A[current]=helper[right];
                current++;
                right++;
            }
        }
        while(left<=mid){
            A[current]=helper[left];
            current++;
            left++;
        }
    }
}

你可能感兴趣的:(算法很美,排序算法,算法,数据结构)