//利用归并排序对随机序列进行排序输出
import java.util.Scanner;
import java.util.Random;
class Sort { //归并排序
int[] a;
int[] t;
public void setNum( int N ){
Random rand = new Random( );
a = new int[N];
t = new int[N];
for( int i=0 ; i<N ; i++ )
a[i] = Math.abs( rand.nextInt() ) % 100 + 1; //随机获得随机数
}
public void sort( int begin , int end ){
int i , j , k , mid;
if( begin >= end ) //排序返回条件
return ;
mid = ( begin + end ) / 2;
sort( begin , mid ); //递归排序
sort( mid+1 , end ); //递归排序
i = begin;
j = mid+1;
k = begin;
while( i<=mid && j<=end ){ //合并1
if( a[i] < a[j] )
t[k++] = a[i++];
else
t[k++] = a[j++];
}
while( i<=mid ) //合并2
t[k++] = a[i++];
while( j<=end ) //合并3
t[k++] = a[j++];
for( i=begin ; i<=end ; i++ ) //保存到原序列里
a[i] = t[i];
}
public void print( ){
for( int i : a )
System.out.print( i + " " );
System.out.println( "" );
}
public static void main( String[] args ){
int N;
Sort obj = new Sort( );
Scanner in = new Scanner( System.in );
N = in.nextInt( );
obj.setNum( N );
obj.print( );
obj.sort( 0 , N-1 );
obj.print( );
}
}
归并排序的思想就是利用归并法进行排序,归并的步骤有:分解、解决、合并归并排序-分治法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.