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

归并排序

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);        
    }

}

 

转载于:https://www.cnblogs.com/xuddong/p/3291199.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值