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; }
来源:CSDN
作者:dalong_bamboo
链接:https://blog.csdn.net/dalong_bamboo/article/details/103800257