public class mergeSort { public static void main(String[] args) { int[] a = {1,3,5,2,4,6,8,10}; merge(a,0,2,7); System.out.println(Arrays.toString(a)); Merge(a,0,a.length-1); System.out.println(Arrays.toString(a)); } //递归 private static void Merge(int[] a,int low,int high) { if (low<high) { int middle = (low + high)/2; Merge(a, low, middle); Merge(a, middle + 1, high); merge(a,low,middle,high); } } //归并 public static void merge(int[] a,int low,int middle,int high){ //用于归并存放的临时数组 int []temp=new int[high-low+1]; int index=0; //记录第一个数组需要遍历的下标 int i=low; //记录第二个数组需要存放的下标 int j=middle+1; //遍历两个数组,比较将小的放入临时数组 while (i<=middle&&j<=high){ if (a[i]<a[j]){ temp[index]=a[i]; i++; }else { temp[index]=a[j]; j++; } index++; } //处理多余的数 while (j<=high){ temp[index]=a[j]; j++; index++; } while (i<=middle){ temp[index]=a[i]; i++; index++; } for (int k=0;k<temp.length;k++){ a[k+low]=temp[k]; } } }
排序--归并排序
最新推荐文章于 2024-11-30 17:41:13 发布