快速排序算法圖文詳解(模版使用)

算法介紹java

快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:經過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的全部數據都比另一部分的全部數據都要小,而後再按此方法對這兩部分數據分別進行快速排序,整個排序過程能夠遞歸進行,以此達到整個數據變成有序序列。算法

算法描述數組

快速排序使用分治法來把一個串(list)分爲兩個子串(sub-lists)。具體算法描述以下:ui

步驟1:從數列中挑出一個元素,稱爲 「基準」(pivot );
步驟2:從新排序數列,全部元素比基準值小的擺放在基準前面,全部元素比基準值大的擺在基準的後面(相同的數能夠到任一邊)。在這個分區退出以後,該基準就處於數列的中間位置。這個稱爲分區(partition)操做;
步驟3:遞歸地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。code

算法實現blog

public void quickSort(int[] num, int left, int right) {
		//若是left等於right,即數組只有一個元素,直接返回
		if(left>=right) {
			return;
		}
		//設置最左邊的元素爲基準值
		int key=num[left];
		//數組中比key小的放在左邊,比key大的放在右邊,key值下標爲i
		int i=left;
		int j=right;
		while(i<j){
			//j向左移,直到遇到比key小的值
			while(num[j]>=key && i<j){
				j--;
			}
			//i向右移,直到遇到比key大的值
			while(num[i]<=key && i<j){
				i++;
			}
			//i和j指向的元素交換
			if(i<j){
				int temp=num[i];
				num[i]=num[j];
				num[j]=temp;
			}
		}
		num[left]=num[i];
		num[i]=key;
		quickSort(num,left,i-1);
		quickSort(num,i+1,right);
	}

算法分析排序

時間複雜度度O(nlogn),空間複雜度(logn)。遞歸

不穩定排序(例a與b值相同,可是在比較後有可能會發生位置變化)內存

內排序(全部排序操做都在內存中完成)it

相關文章
相關標籤/搜索