八大排序(三)快速排序

2022-07-09 10:00:12 字數 1140 閱讀 7370

快速排序是在實際中最常用的一種排序演算法,速度快,效率高,就像名字一樣,快速排序是最優秀的一種排序演算法。

雖然在c++中可以直接呼叫sort進行快排,但還是需要了解他的原理

快速排序採用分治的思想

因此我在這裡簡單介紹一下分治,簡單來說就是「分而治之」,把乙個複雜的問題分成兩個或更多的相同或相似的子問題,

再把子問題分成更小的子問題……直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合併。在電腦科學中,

分治法就是運用分治思想的一種很重要的演算法。分治法是很多高效演算法的基礎,如排序演算法(快速排序,歸併排序)。

分治法經典例子:二分查詢法

eg:例如,有乙個[l,r]的有序數列,你要找某個數(a)在第幾位,你可以先用中間數(b)和a比大小,若果相等就找到了,

若果不相等,再比較a和b的大小,若a>b則在(b,r]的部分執行上述操作,反之,在[l,b)的部分執行上述操作,以此類

推,直到找到該數。

快速排序是指通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,

然後再按此方法對這兩部分資料分別進行快速排序。整個排序過程可以遞迴進行,以達到整個資料變成有序序列。

快速排序採用分治的思想

eg:有乙個數列(49 38 65 97 76 13 27 49)
過程如下圖所示

//公升序快排

void q_sort(int l, int r)//l=left,r=right,l是該陣列的起始位置,r是終止位置,即[l,r]的區間

a[i] = tep;

q_sort(l, i - 1);//對中間值左邊進行排序(遞迴思想)

q_sort(i + 1, r);//對中間值右邊進行排序(遞迴思想)

}int main()

八大排序(三) 快速排序

快速排序的基本思想如下 設要排序的陣列是a 0 a n 1 首先任意選取乙個資料 通常選用陣列的第乙個數 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。值得注意的是,快速排序是一種不穩定的排序演算法,也就是說,多個相同的值的相對位置也許會在演算...

八大排序(五)快速排序

快速排序使用了分治策略。一 選定乙個基準數 一般選取第乙個數 然後把大於它的數都放在它右邊,把小於它的數放左邊。二 這樣就把陣列分成左右兩部分。再將左右兩部分分別遞迴執行第一步,最終當執行第一步的部分大小為一時,遞迴完成,原陣列排序完成。public class quicksort 將剛剛找到的數插...

八大排序之快速排序

快速排序 public class quicksort int arr 測試時間複雜度 o n 2 int arr new int 80000 for int i 0 i arr.length i long start time system.currenttimemillis quicksort ...