归并排序的思想是将数组分成两部分,分别进行排序,然后归并起来。
public static void mergeSort(int[] arr){ if(arr.length>1){ int[] firstHalf = new int[arr.length/2]; System.arraycopy(arr,0,firstHalf,0,arr.length/2); mergeSort(firstHalf); int secondLen = arr.length-arr.length/2; int[] secondHalf = new int[secondLen]; System.arraycopy(arr,arr.length/2,secondHalf,0,secondLen); mergeSort(secondHalf); int[] temp = merge(firstHalf,secondHalf); System.arraycopy(temp,0,arr,0,temp.length); } } public static int[] merge(int[] list1,int[] list2){ int[] list=new int[list1.length+list2.length]; int current1=0; int current2=0; int current3=0; while (current1<list1.length&¤t2<list2.length){ if (list1[current1]<=list2[current2]){ list[current3++]=list1[current1++]; } else{ list[current3++]=list2[current2++]; } } while (current1<list1.length){ list[current3++]=list1[current1++]; } while (current2<list2.length){ list[current3++]=list2[current2++]; } return list; }