JAVA 合并排序(递归算法)
合并排序,递归算法,利用分治策略
+————————————————-code————————————————————–+
// 合并排序,递归算法,利用分治策略 //
import java.util.Scanner;
public class mergeSort {
public static void MergeSort(int a[],int left,int right)
{ if(left<right)
{ //至少需要两个元素
int mid=(left+right)/2; //对左侧排序
MergeSort(a,left,mid); //对右侧排序
MergeSort(a,mid+1,right);
//合并两段排序数组到数组b中,再拷贝回a中
merge(a,left,mid,right);
}
}
private static void merge(int c[],int left,int mid,int right)
{ //合并两段排序数组到数组d中
int d[]=new int[right-left+1];
int i,j,k=0; //k为d数组的下标
i=left;
j=mid+1;
while(i<=mid && j<=right)
{ if(c[i]>c[j]) { d[k]=c[j]; k++; j++;}
else { d[k]=c[i];k++;i++;}
}
for(int q=j;q<=right;q++)
{d[k]=c[q];k++; }
for(int q=i;q<=mid;q++)
{d[k]=c[q];k++; }
//将d中数组再拷贝回c中
int pos=left;
for(k=0;k<=d.length-1;k++)
{ c[pos]=d[k]; pos++;}
}
public static void main(String[] args) {
System.out.println(” +— 合并排序,递归算法 —+ \n 数组长度: “);
Scanner reader= new Scanner(System.in);
int len=reader.nextInt();
int a[]=new int[len];//初始化a数组
System.out.println(“随机生成的数组如下:”);
for(int i=0;i<a.length;i++)
{a[i] = (int)(Math.random()*1000); //产生len个随机数 (<1000)
System.out.println(a[i]); }
MergeSort(a,0,a.length-1);
System.out.println(“排序后的数组如下:”);
for(int i=0;i<a.length;i++)
{ System.out.println(a[i]); }
} }
+————————————————-code————————————————————–+