zoukankan      html  css  js  c++  java
  • 排序-->归并排序

    归并排序图解:

     代码实现:

    package com.cai.math;
    
    import java.util.Arrays;
    
    public class MergerSort {
        public static void main(String[] args) {
            int[] arr = {14,12,15,13,11,16};
            sort(arr,0,arr.length-1);
            System.out.println(Arrays.toString(arr));
    
        }
    
        public static void  sort(int[] arr,int low,int high){
            //每次数组长度/2,分成左右两组,直到分割完,然后再归并
            if(low<high){
                int mid = (low+high)/2;
                sort(arr, low, mid);
                sort(arr,mid+1,high);
                merger(arr, low, high);
            }
        }
    
        /**
         * 数组 归并 如最后一次:{12,14,15}  {11,13,16}==》{11,12,13,14,15,16}
         * 所以这里 low->0 high->5
         * @param arr
         * @param low 低位下角标
         * @param high 高位下角标
         */
        public static void merger(int[] arr,int low,int high){
            //1.分别给出两个指针(对应前后的下角标位置)
            int i = low; //(0-->2)
            int mid = (low+high)/2;//2
            int j = mid+1;  //(3-->5)
            //2.定义一个临时数组,暂时存放对应位置的数据,为之后数组写回对应的数据:这里直接给出需要排序数组的长度
            int[] temp = new int[arr.length];
            int k = low; //临时数组此时指针(为了不考虑其它,这里就对应参数数组对应开始的下角标)
            //3.迭代,直到前一组或后一组的数据全部取出
            while(i<=mid && j<= high){
                //如果 i 指针所对应的数 小于 j对应的数 把i对应的数写入临时数组 i++
                if(arr[i]<arr[j]){
                    temp[k++] = arr[i++];
                }else{ //反之,把j对应的数写入临时数组 j++
                    temp[k++] = arr[j++];
                }
            }
            //4.判断把剩余的数字,依次写入临时数组
            //前一组中还有值
            while (i<=mid ){
                temp[k++] = arr[i++];
            }
            //后一组中有值
            while (j<= high){
                temp[k++] = arr[j++];
            }
            //5.把临时数组的数值,回写到arr
            for (int l = low; l <=high ; l++) { //参数值是下角标,所以应<=
                arr[l] = temp[l];
            }
        }
    }
  • 相关阅读:
    delphi Base64
    delphi 注册表
    二、Spring Boot项目的三种启动方式
    Junit的运行流程以及Junit常用注解
    eclips集成单元测试
    六、AcriveMQ集群配置的三种方式,以及组合实现
    五、Sping 中实现简单实现activeMQ
    三、简单实现activeMQ发送消息
    二、安装ActiveMQ消息中间件
    一、消息中间件基础
  • 原文地址:https://www.cnblogs.com/cai170221/p/13730830.html
Copyright © 2011-2022 走看看