數據結構與算法(JAVA版)3_1:遞歸實現歸併排序

題目:將數組採用遞歸的歸併排序的思想按照升序排序。
思想如下:將數組進行折半劃分,大問題轉換爲小問題,先將小的問題使用merge函數排好序,然後遞歸回到上一個問題,再採用merge排好序,以此類推。
在這裏插入圖片描述

package com.inspire.chapter3;

public class MergeSort {

	public static void main(String[] args) {
		//歸併排序時間複雜度O(N*logN)
		int[] arr={10,9,8,7,6,3,5,2,4,1};
		sort(arr,0,arr.length-1);
		printf(arr);
	}

	public static void sort(int[] arr, int L, int R) {
		if(L>=R){//這一步很重要
			return;
		}
		int mid=L+((R-L)>>1);
		sort(arr,L,mid);
		sort(arr,mid+1,R);
		merge(arr,L,mid,R);
	}

	public static void merge(int[] arr, int L, int mid, int R) {
		
		int[] help=new int[R-L+1];
		int i=0;//指向help數組下標
		int p=L;
		int q=mid+1;
		while(p<=mid&&q<=R){
			help[i++]=arr[p]<arr[q] ? arr[p++]:arr[q++];
		}
		while(p<=mid){
			help[i++]=arr[p++];
		}
		while(q<=R){
			help[i++]=arr[q++];
		}
		for(int j=0;j<help.length;j++){
			arr[L++]=help[j];
		}
	}

	public static void printf(int[] arr) {
		for(int i:arr){
			System.out.print(i+" ");
		}
	}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章