十大簡單排序 快速排序

2021-10-24 03:54:12 字數 518 閱讀 7399

思想:選定乙個元素做中軸,一般是陣列最後乙個元素,從兩頭遍歷陣列,左邊比中軸大的元素和右邊小於等於中軸的元素對換,當左游標大於等於右游標的時候,左游標處的值一定是大於中軸值的,將左游標處的值與末尾的中軸值交換,就完成了第一次的分割,接下來,對中軸兩邊的陣列段再次進行上述相同的處理。最終就得到了排序好的陣列。

快速排序用了分而治之的思想,把大問題分割為小問題,小問題的求解方式與大問題是一樣的,只是規模小,最終小問題的解集合起來就是大問題的解。

int partition(int arr,int leftbound,int rightbound)

//left處的值一定是大於中軸值,也就是rightbound處的值

swap(arr,left,rightbound);

return left;

}void sort(int arr,int leftbound,int rightbound)

void quicksort(int arr,int len)

十大簡單排序 計數排序

思想 用乙個例子來說明計數排序的思想,對n個50 59之間的整數進行排序,n可能很大。雖然資料量很大,但是取值範圍卻很小,我們可以利用乙個陣列a 10 a 0 a 9 對應50.59,也就是說,資料減去50作為陣列的下標,例如56,那麼對應的下標就是56 50 6,那麼a 6 執行一次加1操作,代表...

十大排序演算法 快速排序

原理 從數列中挑出乙個元素,稱為 基準 pivot 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面 相同的數可以到任一邊 在這個分割槽退出之後,該基準就處於數列的中間位置。這個稱為分割槽 partition 操作 遞迴地 recursive 把小於基準值元素的子...

十大經典排序演算法 快速排序

一 演算法複雜度 二 演算法流程 1 尋找乙個基準值pivot,將小於基準的放到基準的左邊,大於基準的放在右邊,這個操作叫做partition 2 遞迴的將基準左邊和右邊的子串行重複上面的步驟 三 實現 import copy def swap arr,i,j tmp arr i arr i arr...