&1 思想和時間複雜度
&2 演算法
#1. 在待排數列中(n個數)選擇乙個基準數(理論上可以任意);
#2. 剩下的 n-1 個數與基準數對比,比基準數小的放左邊,反之在右邊;(也有人稱為劃分操作)
#3. 一輪迴圈結束,此時基準數是位於它的最終位置;
#4. 重複步驟#1~#3,直到最後乙個基準數左邊和右邊的元素個數為0或1,則排序完成。
&3 舉例
&4 c++程式實現
1 #include2 #include3快速排序4using
namespace
std;56
void quicksort(vector &a, int p, int
q);7
int partition(vector &a, int p, int
q);8
void swapv(int &a, int &b);910
intmain();
12int len =seti.size();
13 quicksort(seti,0,len-1
);14
15 cout << "
the sorted array is: \n";
16for (vector::iterator iter = seti.begin(); iter != seti.end(); iter++)
17 cout << *iter << "\t"
;18 cout <
1920 system("
pause");
21return0;
22}2324
void quicksort(vector &a,int p,int
q)30}31
32int partition(vector &a,int p, int
q)41}42
43if (p != j - 1
)44 swapv(a[p],a[j-1
]);45
46return j - 1;47
}4849void swapv(int &a,int &b)
&5 程式實現結果截圖
如果對**優化,親有更好的想法,咱可以一起學習討論哦!
十大經典排序演算法系列 二 插入排序
原理 1 元素依次比較大小,按條件交換位置 2 交換過位置的元素,往回與之前的元素比較大小,找到插入的位置,直到不符合交換位置的條件.跳出迴圈 3 繼續外層迴圈 var arr 0,0,1,2,3,4,5,6,12,22,123,333,333,444,555,666,777,888,999 fun...
十大排序演算法 快速排序
原理 從數列中挑出乙個元素,稱為 基準 pivot 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面 相同的數可以到任一邊 在這個分割槽退出之後,該基準就處於數列的中間位置。這個稱為分割槽 partition 操作 遞迴地 recursive 把小於基準值元素的子...
十大經典排序演算法之 一 氣泡排序
每回比較都得到乙個最大值,因此內迴圈的限制條件應該是j c void bubblesort int arr,int len python def bubblesort arr for i in range 1 len arr for j in range 0 len arr i if arr j a...