分析:
/** * 归并排序 (先将数组利用归并排序排成 有序的左边数组和右边数组,再比较左边数组和右边数组的数值大小进行排序) * */ public class MergeSort { public static void mergeSort(int[] arr){ if(arr.length<2 || arr==null){ return; } mergeSort(arr,0,arr.length-1); } public static void mergeSort(int[] arr,int L,int R){ if(L==R){ return; } //中点位置 int mid=L+((R-L)>>1); mergeSort(arr,L,mid); mergeSort(arr,mid+1,R); merge(arr,L,mid,R); } public static void merge(int[] arr,int L,int mid,int R){ //临时数组存储 int[] help=new int[R-L+1]; //记录临时数组位置 int i=0; //记录左边数组位置 int p1=L; //记录右边数组位置 int p2=mid+1; while (p1<=mid && p2<=R){ help[i++]=arr[p1]<arr[p2]?arr[p1++]:arr[p2++]; } //()将再将左边数组or右边数组中,排好序但是数值大,没有比较的数值放入临时数组中 while (p1<=mid){ help[i++]=arr[p1++]; } while (p2<=R){ help[i++]=arr[p2++]; } //将排好序的临时数组的数值放入原来数组中 for (int j = 0; j < help.length; j++) { arr[L+j]=help[j]; } } //测试 public static void main(String[] args) { //随机生成10个 1~40的数进行测试 Random ran=new Random(); int[] te=new int[10]; for (int i = 0; i < 10; i++) { te[i]=ran.nextInt(40) + 1; } mergeSort(te); for (int i = 0; i < te.length; i++) { System.out.print(te[i]+" "); } } }
好好学习,天天向上。
努力工作,给自己的和家人一个满意的答案。。。。