归并排序-分治法

//利用归并排序对随机序列进行排序输出
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( );
	}
}
归并排序的思想就是利用归并法进行排序,归并的步骤有:分解、解决、合并
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章