• 基本排序算法——归并排序


    归并排序

    package basic.sort;
    
    import java.util.Arrays;
    import java.util.Random;
    
    public class MergeSort {
        
        private <AnyType extends Comparable<? super AnyType>>
        void mergeSort(AnyType[] arr){
            AnyType[] arrNew = (AnyType[]) new Comparable[arr.length];
            mergeSort(arr , arrNew , 0 , arr.length-1);
        }
        
        private <AnyType extends Comparable<? super AnyType>>
        void mergeSort(AnyType[] arr, AnyType[] arrNew ,int left , int right){
            if(left < right){
                int center = (left + right) /2 ;
                mergeSort(arr , arrNew, left , center );
                mergeSort(arr, arrNew, center +1 ,right);
                merge(arr,arrNew,left , center+1 , right);
            }
        }
        
        private <AnyType extends Comparable<? super AnyType>>
        void merge(AnyType[] arr, AnyType[] arrNew ,int leftPos , int rightPos , int rightEnd){
            int leftEnd = rightPos -1;
            int leftTmp = leftPos;
            int numElements = rightEnd - leftPos + 1;
            while(leftPos <= leftEnd && rightPos <= rightEnd){
                if(    arr[leftPos].compareTo(arr[rightPos]) <= 0){
                    arrNew[leftTmp++] = arr[leftPos++];
                }else{
                    arrNew[leftTmp++] = arr[rightPos++] ;
                }            
            }
            
            while(leftPos <= leftEnd){            
                arrNew[leftTmp++] = arr[leftPos++];                    
            }
            
            while(rightPos <= rightEnd){
                arrNew[leftTmp++] = arr[rightPos++];
            }    
            
            for(int i = 0 ; i < numElements ; i++ ){
                arr[rightEnd] = arrNew[rightEnd];
                rightEnd --;
            }
            
        }
        
        
    
        public static void main(String[] args) {
            Random rand = new Random();
            Integer[] arr = new Integer[10];
            for(int i = 0 ;i <10 ;i++){
                arr[i] = rand.nextInt(1000);
            }
            println("MergeSort () ");
            println(Arrays.toString(arr));
            MergeSort mergeSort = new MergeSort() ;
            mergeSort.mergeSort(arr);
            println(Arrays.toString(arr));
        }
        
        public static void println(String str){
            System.out.println(str);        
        }
    
    }
  • 相关阅读:
    react中关于render渲染次数的性能优化
    ES6中六种常用的传出调用方式
    在Vue-cli中得xxx.vue文件中快速生成组件模板
    如何在Vue-cli中关闭ESLint以及关闭部分ESLint验证
    使用ES6删除对象中某些属性
    React中使用遍历
    git commit报错解决,绕过代码检查
    React学习——子组件给父组件传值
    React学习——通过模态框中的表单,学习父子组件之间传值
    学习axios
  • 原文地址:https://www.cnblogs.com/xuddong/p/3291199.html
Copyright © 2020-2023  润新知