归并排序

来源:互联网 发布:python中函数传参数 编辑:程序博客网 时间:2024/05/22 02:11

归并排序:

思想:
归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。

java代码具体实现

public class MergeSort {    public static int[] sort(int[] nums,int low,int high){        int mid=(low+high)/2;        if(low<high){            //左边            sort(nums,low,mid);            //右边            sort(nums,mid+1,high);            //左右归并            merge(nums,low,mid,high);        }        return nums;    }    public static void merge(int[] nums,int low ,int mid,int high){        int[] temp=new int[high-low+1];        int i=low;//左指针        int j=mid+1;//右指针        int k=0;        //将较小的数移到新数组中        while(i<=mid && j<=high){            if(nums[i]<nums[j]){                temp[k++]=nums[i++];            }else{                temp[k++]=nums[j++];            }        }        //把左边剩余的数移到数组        while(i<=mid){            temp[k++]=nums[i++];        }        //把右边剩余的数移到数组        while(j<=high){            temp[k++]=nums[j++];        }        //把新数组中的数覆盖nums数组        for(int k2=0;k2<temp.length;k2++){            nums[k2+low]=temp[k2];        }    }    public static int[] getRandomArray(int len,int min,int max){        int[] array=new int[len];        for(int i=0;i<len;i++){            array[i]=(int)(Math.random()*(max-min+1)+min);        }        return array;    }    public static void main(String[] args) {        int[] nums=getRandomArray(10000,0,100000);        long time=System.nanoTime();        sort(nums,0,nums.length-1);         System.out.println(System.nanoTime()-time);        System.out.println(Arrays.toString(nums));      }}
原创粉丝点击