第三章 :查詢與排序-------3.2你需要掌握的快速排序演算法
你需要掌握的快速排序演算法:
思路:
QuickSort(A,p,r)
if p<r
q=Partition(A,p,r)
QuickSort(A,p,q-1)
QuickSort(A,q+1,r)
快排的劃分演算法:
思路:
兩個指標:scanner 、bigger。
scanner: <=sp 右移;
>sp 交換,bigger左移。
邊界:如果最後一個掃描元素大於主元,bigger左移之後小於了scanner;
如果最後一個掃描元素小於主元,scanner的右移,導致scanner大於bigger。
末了狀態一定是: bigger<scanner,且二者臨近。
#include<iostream>
using namespace std;
int partition(int A[],int p,int r){
int pivot=A[p];
int sp=p+1; //掃描指標
int bigger=r; //右側指標
while(sp<=bigger){
if(A[sp]<=pivot){ //掃描元素小於主元,左側指標向左移
sp++;
}
else{
swap(A[sp],A[bigger]);
bigger--;
}
}
swap(A[p],A[bigger]);
return bigger; //返回主元在交換完成後的下標
}
void quickSort(int A[],int p, int r){
if(p<r){
int q=partition(A,p,r);
quickSort(A,p,q-1);
quickSort(A,q+1,r);
}
}
int main(){
int arr[]={1,6,2,3,4,8,11,3,9,4,2,5,3};
quickSort(arr,0,12);
for(int i=0;i<13;i++){
cout<<arr[i]<<" ";
}
return 0;
}
結果:
相關文章
- 第三章:查詢與排序(下)----------- 3.20桶排序排序
- 第三章:查詢與排序(下)----------- 3.21基數排序排序
- 第三章:查詢與排序(下)----------- 3.19 計數排序排序
- 快速掌握Java幾種排序演算法的區別與排序演算法的應用Java排序演算法
- 第三章:查詢與排序(下)----------- 3.28 特殊排序(利用sort函式)排序函式
- 第三章:查詢與排序(下)----------- 3.22 總結:10種排序演算法的對比分析排序演算法
- 第三章:查詢與排序(下)----------- 3.16堆的概念及堆排序思路排序
- 查詢與排序05,氣泡排序排序
- 查詢與排序04,插入排序排序
- 查詢與排序03,選擇排序排序
- 查詢與排序02,折半查詢排序
- 第三章 :查詢與排序-------3.7分治模式的完美詮釋_歸併排序排序模式
- Python之排序演算法:快速排序與氣泡排序Python排序演算法
- 排序演算法__快速排序排序演算法
- 排序演算法:快速排序排序演算法
- 排序演算法-快速排序排序演算法
- 排序演算法——快速排序排序演算法
- 排序演算法 - 快速排序排序演算法
- 第二章 :查詢與排序---------遞迴、查詢與排序補充排序遞迴
- 分分鐘掌握快速排序排序
- 第二章 :查詢與排序-------希爾排序排序
- java:快速排序演算法與氣泡排序演算法Java排序演算法
- 排序演算法之 '快速排序'排序演算法
- #排序演算法#【4】快速排序排序演算法
- 《排序演算法》——快速排序(Java)排序演算法Java
- 第三章:查詢與排序(下)----------- 3.14 逆序對個數排序
- 【JAVA演算法】排序演算法 -- 快速排序Java演算法排序
- 第三章:查詢與排序(下)----------- 3.23 相關題解:排序陣列中找和的因子排序陣列
- 結構與演算法(04):排序規則與查詢演算法演算法排序
- 排序演算法之快速排序的實現排序演算法
- 排序演算法 - 快速插入排序和希爾排序排序演算法
- 查詢與排序01,線性查詢,時間複雜度,演算法排序時間複雜度演算法
- 第三章:查詢與排序(下)----------- 3.15基礎學習_樹、二叉樹、堆排序排序二叉樹
- 第三章:查詢與排序(下)----------- 3.27 用計數排序解決員工年齡問題排序
- 第二章 :查詢與排序-------2.15 分析10種排序演算法的穩定性排序演算法
- 排序和查詢排序
- 帶你掌握4種Python 排序演算法Python排序演算法
- 三種快速排序演算法以及快速排序的優化排序演算法優化