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

    第一步:做数组的拆分

        //归并排序
        public static void sort(int[] arr){
            int[] tmp = new int[arr.length];
            int left = 0 ;
            int right = arr.length-1 ;
            sortMerge(arr , left , right , tmp);
    
        }
    
        public static void sortMerge(int[] arr , int left , int right , int[] tmp){
            if(left < right){
                int mid = (left +  right) / 2 ;
                sortMerge(arr , left , mid , tmp);
                sortMerge(arr , mid+1 , right , tmp);
                merge(arr , left , mid , right , tmp);
            }
    
        }

    第二步:排序

    这一步需要两个指针:第一个指针是前面数组的初始指针 , 第二个指针是另外一个数组的初始指针

    int i = left ; //左指针
    int j = mid+1 ; //右指针

    做排序:

        public static void merge(int[] arr , int left , int mid , int right , int[] tmp){
            int i = left ; //左指针
            int j = mid+1 ; //右指针
            int t = 0 ;//数组临时指针
            while (i <= mid && j <= right){
                if(arr[i] <= arr[j]){
                    tmp[t++] = arr[i++];
                }else{
                    tmp[t++] = arr[j++];
                }
            }
            while (i <= mid){
                tmp[t++] = arr[i++];
            }
            while (j <= right){
                tmp[t++] = arr[j++];
            }
    
            t = 0 ;
            while (left <= right){
                arr[left ++] = tmp[t++];
            }
        }

    全部代码:

    public class MergeSort {
    
        public static void main(String[] args) {
            int[] arr = {8,7,6,5,4,3,2,1} ;
            sort(arr);
            System.out.println(Arrays.toString(arr));
        }
        public static volatile int index = 1 ;
    
        //归并排序
        public static void sort(int[] arr){
            int[] tmp = new int[arr.length];
            int left = 0 ;
            int right = arr.length-1 ;
            sortMerge(arr , left , right , tmp);
    
        }
    
        public static void sortMerge(int[] arr , int left , int right , int[] tmp){
            if(left < right){
                int mid = (left +  right) / 2 ;
                sortMerge(arr , left , mid , tmp);
                sortMerge(arr , mid+1 , right , tmp);
                merge(arr , left , mid , right , tmp);
            }
    
        }
    
        public static void merge(int[] arr , int left , int mid , int right , int[] tmp){
            int i = left ; //左指针
            int j = mid+1 ; //右指针
            int t = 0 ;//数组临时指针
            while (i <= mid && j <= right){
                if(arr[i] <= arr[j]){
                    tmp[t++] = arr[i++];
                }else{
                    tmp[t++] = arr[j++];
                }
            }
            while (i <= mid){
                tmp[t++] = arr[i++];
            }
            while (j <= right){
                tmp[t++] = arr[j++];
            }
    
            t = 0 ;
            while (left <= right){
                arr[left ++] = tmp[t++];
            }
        }
    
    }
    全部代码
  • 相关阅读:
    spring mybatis 关于 basepackage 和 mapperLocations 的通配符匹配实例
    nginx 隐藏版本信息
    nginx 虚拟主机配置
    分析解决 spring quartz 中出现的执行两次问题
    nginx 安装配置和常用命令
    JMX 远程监控 Linux tomcat 功能实现
    jvm 类加载机制
    jvm 类文件结构学习
    转 MySQL: Starting MySQL….. ERROR! The server quit without updating PID file解决办法
    MySQL提示:The server quit without updating PID file问题的解决办法
  • 原文地址:https://www.cnblogs.com/niutao/p/10609955.html
Copyright © 2011-2022 走看看