归并排序

流过昼夜 提交于 2020-01-11 08:07:24
public static void main(String[] args) {
    int[] array={49,38,65,97,76,13,27,49,78,34,12,64,1};
    int[] newArray = myMergeSort(array, 0, array.length - 1);
    System.out.println("排序之后:");
    for(int i=0;i<newArray.length;i++){
        System.out.print(newArray[i]+" ");
    }
    System.out.println();
}


/**
 * 包含leftIndex和rightIndex
 * @param arr
 * @param leftIndex
 * @param rightIndex
 * @return
 */
public static int[] myMergeSort(int[] arr,int leftIndex,int rightIndex){
    if(leftIndex==rightIndex){//按照切分法,当leftIndex==rightIndex时,就代表只有一个元素了,切到最小了,也就可以返回了
        return new int[]{arr[leftIndex]};
    }
    int midIndex=leftIndex+(rightIndex-leftIndex)/2;
    int[] leftArr = myMergeSort(arr, leftIndex, midIndex);//左边,midIndex划分到左边
    int[] rightArr = myMergeSort(arr, midIndex+1, rightIndex);//右边,rightIndex划分到右边
    int[] newArr=new int[leftArr.length+rightArr.length];
    int lefArrIndex=0;
    int rightArrIndex=0;
    int newArrIndex=0;
    while(lefArrIndex< leftArr.length && rightArrIndex< rightArr.length){
        newArr[newArrIndex++]=leftArr[lefArrIndex]<rightArr[rightArrIndex]?leftArr[lefArrIndex++]:rightArr[rightArrIndex++];
    }
    while(lefArrIndex< leftArr.length){
        newArr[newArrIndex++]=leftArr[lefArrIndex++];
    }
    while(rightArrIndex< rightArr.length){
        newArr[newArrIndex++]=rightArr[rightArrIndex++];
    }
    return newArr;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!