アルゴリズムの設計と解析Review-- 2ウェイマージソート

免責事項:この記事はブロガーオリジナル記事ですが、許可ブロガーなく再生してはなりません。https://blog.csdn.net/kingslave1/article/details/84764907

 

public class MergeSortTest{
    private void merge(int []arr,int i1,int j1,int i2,int j2) {
		int k=i1<i2?i1:i2;
		
		int []temp=new int[(j1-i1+1)+(j2-i2+1)];
		int i3=0;
		while(i1<=j1||i2<=j2) {
			int a1=i1<=j1?arr[i1]:Integer.MAX_VALUE;
			int a2=i2<=j2?arr[i2]:Integer.MAX_VALUE;
			if(a1<a2) {
				temp[i3++]=a1;
				i1++;
			}else {
				temp[i3++]=a2;
				i2++;
			}
		}
		
		for(int i=0;i<temp.length;i++) {
			arr[k+i]=temp[i];
		}
	}
	
	public void mergeSort(int []arr) {
		mergeSort(arr, 0, arr.length-1);
	}
	
	private void mergeSort(int []arr,int left,int right) {
		if(left<right) {
			int mid=(left+right)/2;
			mergeSort(arr, left, mid);
			mergeSort(arr, mid+1, right);
			merge(arr, left, mid, mid+1, right);
		}
	}
	
	public static void main(String[] args) {
		int []arr= {3,6,8,7,5,1,4,9,2};
		for(int i=0;i<arr.length;i++) {
			System.out.print(arr[i]+" ");
		}
		System.out.println();
		new SortableList().mergeSort(arr);
		for(int i=0;i<arr.length;i++) {
			System.out.print(arr[i]+" ");
		}
		System.out.println();
	}
}

 

おすすめ

転載: blog.csdn.net/kingslave1/article/details/84764907