歸併排序-分治法

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