package Sort;
import java.util.Random;
public class Merge_Sort {
final static int inf = Integer.MAX_VALUE;
public static void main(String[] args) {
//初始化数组
int [] a = new int [1000];
for(int i =0;i<a.length;i++){
a[i] = new Random().nextInt(1000);
}
//排序前
for(int i = 0;i< a.length;i++){
if(i%20==0){
System.out.println();
}
System.out.print(a[i]+" ");
}
System.out.println("\n");
//调用归并排序算法
Merge_sort(a,0,a.length-1);
//排序后
for(int i = 0;i<a.length;i++){
if(i%20==0){
System.out.println();
}
System.out.print(a[i]+" ");
}
}
//归并排序
public static void Merge_sort(int []A, int p, int r){
if(p < r){
int q = (p+r)/2;
Merge_sort(A, p, q);//排序[p,q]
Merge_sort(A, q+1, r);//排序[q+1,r]
MERGE(A, p, q, r);//合并[p,q][q+1,r]数组
}
}
//数组合并操作
public static void MERGE(int []A, int p, int q, int r){
int n1 = q-p+1;
int n2 = r-q;
int[]L = new int[n1+1];
int[]R = new int[n2+1];
//L数组 R数组赋值
for(int i=0;i< n1;i++){
L[i] = A[p+i];
}
for(int j = 0;j< n2;j++){
R[j] = A[q+j+1];
}
//哨兵
L[n1] = inf;
R[n2] = inf;
int i = 0;
int j = 0;
//合并数组并排序
for(int k = p; k <= r; k++){
if(L[i]<=R[j]){
A[k] = L[i];
i++;
}else{
A[k] = R[j];
j++;
}
}
}
}
归并排序
最新推荐文章于 2024-08-12 19:32:44 发布