快排的特點:
最壞情況下,對n個數的排序所花的時間是o(n^2)。雖然這個結果比較差,但是快速排序卻是用於排序的最佳的實用選擇,因為它的平均效能相當好:期望的執行時間為o(nlgn),且o(nlgn)中的隱含因子比較小,另外,它還能夠就地排序(也就是不需要另外開闢乙個陣列空間來進行中間資料儲存),在虛存環境中也能很好的工作。
快排的原理:
public static void quicksort(int arr, int p, int r)
}
/// /// 將陣列從下標p到r進行分解,返回乙個下標(記為q吧),
/// 在下標左邊的數均小於arr[q],右邊的數均大於arr[q]
///
///
///
///
///
public static int partition(int arr, int p, int r)
}tmp = arr[i + 1];
arr[i + 1] = arr[r];
arr[r] = tmp;
return i + 1;
}
關鍵點就在partition方法了,下面舉個例子來看看快速排序partition的流程:
相信看到這個執行過程後,已經基本理解了快速排序的思想了。現在給乙個思考題:
如果陣列p到r中的元素都相等,則partition的返回值是多少呢?怎樣才能讓它返回(p+r)/2呢?
基於C語言實現快速排序
快速排序的基本思想是 1 先從陣列中取出乙個數作為基準數。2 將小於或等於它的數全放到它的左邊,大於它的數全放到它的右邊。3 再對左右區間重複第 2 步,直到各區間只有乙個數。更易於理解的排序邏輯是 挖坑 遞迴 請移步此微軟大佬的文章 白話經典演算法系列之六 快速排序 快速搞定 時間複雜度 o n2...
快速排序 基於scala實現
快速排序由於排序效率在同為o n logn 的幾種排序方法中效率較高,因此經常被採用,再加上快速排序思想 分治法也確實實用.快速排序是c.r.a.hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 divide and conquermethod 該方法的基本思想...
排序 快速排序,C 實現
本文 的github位址 基本思想 快速排序 是對 氣泡排序 的改進。基本原理 基於分治法,在待排線性表中取乙個元素pivot作為樞軸值,通過一趟排序將待排線性表劃分為獨立的兩部分,第一部分的所有元素小於pivot,第二部分的所有元素大於等於pivot,pivot位於其最終位置。遞迴對兩個子表做快速...