快速排序是對氣泡排序的一種改進,由 c.a.r.hoare(charles antony richard hoare,東尼·霍爾)在 1962 年提出。
快速排序的核心思維
每次都取陣列的第乙個元素作為基準元素,凡是大於這個基準元素的都放在他的右邊,凡是小於這個基準元素的都放在它的左邊,具體步驟如下:
設定兩個變數i和j(也稱為哨兵),令序列第乙個元素作為基準元素
i指向序列的最左邊,j指向序列的最右邊,j從右往左試探,i從左往右試探,直到j找到小於基準的數就停止,i找到大於基準的數就停止,交換i和j指向的兩個數,j繼續往左試探,i繼續往右試探
如果i和j相遇,則i或j上的元素與基準元素交換,則這一輪排序結束
對基準元素兩邊的序列重複以上操作
這裡以陣列 6 2 7 3 9 8 為例,我們的基準元素取首元素6,首先i和j分別為頭和尾元素。根據步驟2中,首先j往左邊移動直到遇到第乙個比6小的元素
此時的j到3這兒,然後i開始往右邊移動直到找到第乙個比基準元素大的元素,此時找到了7
然後交換i和j指向的兩個資料
然後j接著往左邊移動再找到第乙個小於基準的資料,但是這兒i和j在3數字這兒相遇,由此根據步驟3,把i或j(因為此時的i和j都指向同乙個數字3)與基準元素進行交換,這樣就完成了第一輪的交換。
此時會發現基準元素6的左邊都是比6小,右邊都是比6 大,由此第一輪排序結束,然後分別接著對 3 2 這兩個數字重複上面的操作(即將3作為基準元素,然後3 和2分別為頭和尾元素),7 8 9 也重複上面的操作,最後就可以完成整個陣列的排序
下面是c++**實現:
#include
#include
using std::cout;
using std::endl;
using std::vector;
using std::swap;
void
quicksort
(vector<
int>
& vi,
int lo,
int hi)
while
(vi[i]
<= pivot && j > i)
if(i
}swap
(vi[lo]
, vi[i]);
quicksort
(vi, lo, i-1)
;quicksort
(vi, i+
1, hi);}
}int
main()
;quicksort
(s,0,5
);for(
auto x:s)
return0;
}
排序 快速排序,C 實現
本文 的github位址 基本思想 快速排序 是對 氣泡排序 的改進。基本原理 基於分治法,在待排線性表中取乙個元素pivot作為樞軸值,通過一趟排序將待排線性表劃分為獨立的兩部分,第一部分的所有元素小於pivot,第二部分的所有元素大於等於pivot,pivot位於其最終位置。遞迴對兩個子表做快速...
快速排序 c 實現
快速排序思想 基於分治策略,對氣泡排序的一種改進。對於要排序的乙個序列,從中選一值進行排序,將其放入到正確的位置position。然後以position為界,對左右兩部分再做排序。直到劃分的長度為1。步驟 設有一待排序的序列 1.分別設定low hight指向序列的最左端 最右端 從序列中選乙個進行...
快速排序(C 實現)
include using namespace std void swap int a,int b int sort int begin,int end if beginwhile beginif begin return begin void quicksort int begin,int end...