快速排序
氣泡排序
每次迴圈,相鄰兩元素兩兩比較,不符合則交換,最大元素沉底
//隨便寫的,好像不對
void
bmblesort
(sqlist &l)
}}
快速排序(quick sort)
1 快速排序的原理
遞迴邊界:序列長為1或0則不必排序
遞迴關係:
薛烈長度大於1,則選擇某元素作為樞軸(如最左側元素)
根據樞軸元素將原序列乙份為二(劃分)
左右兩側子串行通過重複上述過程,遞迴完成各自的排序
劃分:選最左元素作為樞軸,備份之,令low和high指向兩端
先high向左找小元素移動到右側,再low向右找元素移動到左側,
如此重複至兩者相遇;
填入樞軸,完成劃分
2 快速排序演算法的實現
int
partition
(sqlist l,
int low,
int high)
l.r[low]
= l.r[0]
;return low;
}void
qsort
(sqlist &l,
int low,
int high)
}
3 總結與推廣 快速排序筆記
背景 給直角座標系下的座標 x,y 組合排序,用到此,特記之。最壞時間複雜度 n2 平均時間複雜度 nlg n include include using namespace std 基於分治思想。初始化慢者,比快者慢一步,中樞是最後乙個數 慢者始終指向快者最近鄰的比中樞小的值,傾向於往前一步是大值...
快速排序學習筆記
學習資料出處 白話經典演算法系列之六 快速排序 快速搞定 快速排序採用分治策略,其基本思想 1 從數列中選乙個元素x作為基準數 2 分割槽過程,把不小於x的元素放到x的右邊,小於x的元素放到x的左邊 3 再對左右區間重複進行分割槽操作,直到各區間只有乙個數 morewindows總結的 挖坑填數 分...
快速排序演算法筆記
個人理解 1 在一組資料中尋找基準數 2 在左右兩端開始比較,從右開始往左推遇到比基準數小的便停下定位,再從左開始往右推遇到比基準數大的數也停下定位,然後將這兩個數交換位置。4 最後將基準數放到資料中間,右邊留有比基準數大的數,左邊留有比基準數小的數。5 在以基準數為界,將兩邊再次分為兩組資料。6 ...