Java教程

java--归并排序算法2.0

本文主要是介绍java--归并排序算法2.0,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

归并排序算法2.0( Merge sort)

算法最好最坏平均空间稳定性 
递归 nlog2n nlog2n nlog2n n 稳定  
 
import java.util.Arrays;
​
public class Marge {
//递归算法Recursion algorithm
     public static void main(String[] args) {
         int[] arr={1,4,7,8,3,6,9};
             //{5,9,11,12,17,21,31,3,4,6,9,10};
         System.out.print("原序列输出:");
         System.out.println(Arrays.toString(arr));
         System.out.print("排序的结果:");
         sort(arr, 0, arr.length-1);
         print(arr);
             
    } 
     static void sort(int[] arr,int left,int rigth){
         if(left==rigth)return;
         //数组中间值
         int mid = left+(rigth-left)/2;
         //左边排序
         sort(arr, left, mid);
         //右边排序
         sort(arr, mid+1, rigth);
         marge(arr, left, mid+1, rigth);
     }
    static void marge(int[] arr,int leftptr,int rigthptr,int certerptr){
        int[] temp = new int[certerptr-leftptr+1];
        int mid=  rigthptr-1;
        int i=leftptr;
        int j=rigthptr;
        int k=0;
        while(i<=mid&&j<=certerptr){
            if(arr[i]<arr[j])
                {
                temp[k++]=arr[i++];
                 
            }else{
                temp[k++]=arr[j++];
            }
        }
        while(i<=mid)temp[k++]=arr[i++];
        while(j<=certerptr)temp[k++]=arr[j++];
        for(int m=0;m<temp.length;m++){ arr[leftptr+m]=temp[m];
        } 
    }
    static void print(int[] arr){
        for(int i=0;i<arr.length;i++){
            System.out.print(" "+arr[i]);
        }
    }
    
}
​

结果打印如下:

 

原序列输出:[1, 4, 7, 8, 3, 6, 9]排序的结果: 1 3 4 6 7 8 9



这篇关于java--归并排序算法2.0的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!