【算法】归并排序算法的java实现

xiaoxiao2022-06-03  13

归并排序的核心代码(递归): private static void mergeSort(int[] a, int i, int j) { if (i < j) { int mid = (i+j)/2;//这里取中位数,不能是(j-i+1)/2 mergeSort(a, i, mid); mergeSort(a, mid+1, j); merge(a,i,mid,j); } } 合并两个有序数组 //注意这个函数必须有left参数,不可以每次都是从0开始。 private static void merge(int[] a,int left, int mid, int right) { int i = left; int j = mid+1; int k = 0; int ans[] = new int[right-left+1];//保存排好序的结果 while (i <= mid && j <= right) { if (a[i] <= a[j]) { ans[k++] = a[i++]; }else{ ans[k++] = a[j++]; } } while(i <= mid) { ans[k++] = a[i++]; } while(j <= right) { ans[k++] = a[j++]; } //改变参数中的a数组里保存的值(不能只传引用) for(int t = left,tans=0;t <= right;t++) { a[t] = ans[tans++]; } } 随机生成指定个数的数组 private static int[] getRandomArr(int numberCount) { int a[] = new int[numberCount]; for (int i = 0; i < a.length; i++) { a[i] = (int) (1+(int)(Math.random()*(numberCount*5-1)));//生成从1~numberCount*5的随机数 } return a; } 主函数 public static void main(String[] args) { int n = 20;//生成20个元素的数组 int a[] = getRandomArr(n);//数组个数 System.out.println("归并排序 defore:"); System.out.println(Arrays.toString(a)); mergeSort(a,0,n-1); System.out.println("after:"); System.out.println(Arrays.toString(a));
转载请注明原文地址: https://www.6miu.com/read-4915027.html

最新回复(0)