詳解快速排序 -秒懂

詳解快速排序 -秒懂

      點關注不迷路,歡迎再訪!

精簡博客內容,儘量已專業術語來分享。
努力做到對每一位認可自己的讀者負責。
幫助別人的同時更是豐富自己的良機。

快速排序算法和冒泡排序算法類似,都是基於交換排序思想的。快速排序算法對冒泡排序算法進行了改進,從而具有更高的執行效率。

快速排序算法通過多次比較和交換來實現排序,其排序流程如下:
1.首先設定一個分界值,通過該分界值將數組分成左右兩部分。
2.將大於等於分界值的數據集中到數組的右邊,小於分界值的數據集中到數組的左邊。此時,左邊部分中各元素都小於等於分界值,而右邊部分中各元素都大於等於分界值。
3.然後,左邊和右邊的數據可以獨立排序。對於左側的數組數據,又可以取一個分界值,將該部分數據分成左右兩部分,同樣將左邊放置較小值,右邊放置較大值。右側的數組數據也可以做類似處理。
4.重複上述過程,可以看出這是一個遞歸定義。通過遞歸將左側部分排好序後,再遞歸排好右側部分的順序。當左、右兩部分各數據排序完成後,整個數組的排序也就完成了。

	public static void main(String[] args) {
		int [] arr = {69,62,89,37,97,17,28,49};
		quickSort(arr,0,arr.length-1);
		System.out.print("排序後的數組結果:\n");    //輸出每步排序的結果
		
		for (int h = 0; h < arr.length; h++) {
			System.out.print(arr[h]+" ");
		}
		System.out.print("\n");
	}
	
	
	public static  void quickSort(int [] arr,int left,int right) {
		int f,t;
		int rtemp,ltemp;
		ltemp = left;
		rtemp = right;
		f = arr[(left + right)/2];    //分界值
		while(ltemp < rtemp) {
			while(arr[ltemp] < f) {
				++ltemp;
			}
			while(arr[rtemp] > f) {
				--rtemp;
			}
			if(ltemp <= rtemp) {
				t = arr[ltemp];
				arr[ltemp] = arr[rtemp];
				arr[rtemp] = t;
				--rtemp;
				++ltemp;
			}
		}
		
		if(ltemp == rtemp) {
			ltemp++;
		}
		if(left < rtemp) {
			quickSort(arr,left,ltemp-1);    //遞歸調用
		}
		if(ltemp < right) {
			quickSort(arr,rtemp+1,right);    //遞歸調用
		}
	}

排序後的數組結果:
17 28 37 49 62 69 89 97

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