您的位置:首页 > 其它

归并排序

2017-08-08 19:45 99 查看

归并排序:

思想:

归并排序(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
4000
(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));
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: