归并排序
归并排序:代码实现 格式:两个方法 一个分的方法(结束标记) 一个合并的方法
/** * @Author zh * @Description 实现归并排序 * @Date 2021/12/14 */ public class Merge { //分的方法fork public static int[] fork(int[] arr){ //一定要有结束标记 if (arr.length<=2){
//排序 Arrays.sort(arr); System.out.println(Arrays.toString(arr)); return arr; }else { int mid =arr.length/2; //进行拆分:左边的数组 int[] left =Arrays.copyOfRange(arr,0,mid); //右边的数组 int[] right = Arrays.copyOfRange(arr, mid, arr.length); System.out.println("原来的"+Arrays.toString(arr)+"==>"+Arrays.toString(left)+"" +Arrays.toString(right)); //顺便进行合并 return join(fork(left),fork(right)); } } //合并的方法 public static int[] join(int[] left,int[] right){ //定义一个新数组,用来装每次的合并 int[] newArr =new int[left.length+right.length]; //left的下标 int i =0; //right的下标 int j =0; //index表示的新数组的下标 for (int index = 0; index < newArr.length; index++) { //如果j比完了 if (j>=right.length){ newArr[index]=left[i]; i++; }else if (i>=left.length){ //如果i比完了 newArr[index]=right[j]; j++; } else if (left[i] > right[j]) { //如果左边比右边大 newArr[index]=right[j]; j++; }else if ((left[i]<=right[j])){ //右边比左边大 newArr[index] =left[i]; i++; } } return newArr; } public static void main(String[] args) { int[] arr={9,8,6,4,2,3,7,1}; int[] fork = fork(arr); System.out.println(Arrays.toString(fork)); } }
浙公网安备 33010602011771号