zoukankan      html  css  js  c++  java
  • 算法之归并排序

    package com.ebiz.sort;
    
    import java.util.Arrays;
    
    /**
     * @author YHj
     * @create 2019-09-03 22:21
     *  /**
     * 归并排序(递归)
     *
     * ①. 将序列每相邻两个数字进行归并操作,形成 floor(n/2)个序列
     * ②. 执行①直到每组有一个元素
    * ③. 各组之间进行比较
    * ④. 重复步骤,直到所有元素排序完毕。
    */ public class Merge { public static void main(String[] args) { int [] arr = {8,4,5,7,1,3,6,2,9}; mergingSort(arr); } public static int[] mergingSort(int[] arr){ if(arr.length <= 1){ return arr; } int num = arr.length >> 1; int[] leftArr = Arrays.copyOfRange(arr, 0, num); int[] rightArr = Arrays.copyOfRange(arr, num, arr.length); System.out.println("split two array: " + Arrays.toString(leftArr) + " And " + Arrays.toString(rightArr)); return mergeTwoArray(mergingSort(leftArr), mergingSort(rightArr)); //不断拆分为最小单元,再排序合并 } private static int[] mergeTwoArray(int[] arr1, int[] arr2){ int i = 0, j = 0, k = 0; int[] result = new int[arr1.length + arr2.length]; //申请额外的空间存储合并之后的数组 while(i < arr1.length && j < arr2.length){ //选取两个序列中的较小值放入新数组 if(arr1[i] <= arr2[j]){ result[k++] = arr1[i++]; }else{ result[k++] = arr2[j++]; } } while(i < arr1.length){ //序列1中多余的元素移入新数组 result[k++] = arr1[i++]; } while(j < arr2.length){ //序列2中多余的元素移入新数组 result[k++] = arr2[j++]; } System.out.println("Merging: " + Arrays.toString(result)); return result; } }
  • 相关阅读:
    linux 修改文件夹颜色 终端颜色
    每日更新FadeTop背景为必应图片
    odoo 去除动作菜单的删除按钮
    crontab详解
    odoo 创建初始数据库 切换当前数据库
    python for else
    lfi phpinfo
    python __dict__
    iscsi 开机自动挂载
    HP SSD smart path
  • 原文地址:https://www.cnblogs.com/jiushixihuandaqingtian/p/11463263.html
Copyright © 2011-2022 走看看