歸併排序(java)筆記

public class MergeArrays {
	//需要三個指針,頭尾各一個,以及分割這個數組的一個指針(mid)
	//另外需要一個臨時數組長度爲(hight-low+1)
	//通過指針比較,將小的存於臨時數組,再將未循環的數依次放進臨時數組中
	//將臨時數組複製給參數數組
	public static void mergeArrays(int[] arr,int low,int mid,int hight) {
		int[] temp=new int[hight-low+1];
		int index=0;
		int i=low,j=mid+1;
		while(i<=mid && j<=hight) {
			if (arr[i]<arr[j]) {
				temp[index]=arr[i];
				i++;
				index++;
			}
			else {
				temp[index]=arr[j];
				j++;
				index++;
			}
		}
		while (i<=mid) {
			temp[index]=arr[i];
			i++;
			index++;
		}
		while (j<=hight) {
			temp[index]=arr[j];
			j++;
			index++;
		}

		for (int k = 0; k < temp.length; k++) {
			arr[k+low]=temp[k];
		}

	}
	//迭代的排序數組
	public static void mergeIteration(int arr[],int low,int hight) {
		int mid=(low+hight)/2;
		if (low<hight) {
			mergeIteration(arr, low, mid);
			mergeIteration(arr, mid+1, hight);
			mergeArrays(arr,low,mid,hight);
		}	
	}
	//數組進入的入口
	public static int[] mergeSort(int arr[]) {
		int low=0;
		int hight=arr.length-1;
		mergeIteration(arr, low, hight);
		return arr;
	}
	
}

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