//利用歸併排序對隨機序列進行排序輸出
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( );
}
}
歸併排序的思想就是利用歸併法進行排序,歸併的步驟有:分解、解決、合併歸併排序-分治法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.