基礎演算法 快速排序(C )

2021-10-23 00:26:05 字數 704 閱讀 2086

**參考自《演算法筆記》。

#include #include #include using namespace std;

//預設以a[left]為主元的快排

int partition_1(int a,int left,int right)

{ int temp=a[left];

while(lefttemp)

right--;

a[left]=a[right];

while(lefttemp)

right--;

a[left]=a[right];

while(left對其中「int p=(round(1.0*rand()/rand_max*(right-left)+left));」這句**的說明:

(1)首先rand()函式可以生成 乙個[0,rand_max]範圍內的隨機數;(包含在標頭檔案中)

(2)其次用rand()生成的隨機數除以rand_max可得到乙個[0,1]範圍內的浮點數;

(3)用這個浮點數乘以(right-left)就能得到範圍在[0,right-left]範圍內的浮點數,再加上left便得到範圍為[left,right]的浮點數;

(4)最後為了得到整數,使用函式round()得到整數。(包含在標頭檔案中。round(number,digits)函式的number是要取捨的數,digits表示小數點後的精度,若digits不寫則預設取整)

基礎演算法 快速排序 C 實現

演算法基本思想和步驟 分治思想 1.確定邊界點和分界點 2.調整區間 3.遞迴處理左右兩段 題目關鍵點 邊界的確定 區間的調整 調整後再遞迴 題目 給定你乙個長度為n的整數數列。請你使用快速排序對這個數列按照從小到大進行排序。並將排好序的數列按順序輸出。輸入格式 輸入共兩行,第一行包含整數 n。第二...

基礎排序演算法 快速排序

快速排序大家應該都知道,快速排序是一種不穩定的演算法,運氣差可以降速降到冒泡的速度,運氣好能快到比歸併還快的速度。首先,快速排序需要選擇乙個x,這個數很多人稱為基準。剛開始的時候選擇 a 0 當x,讓i l,j r 剛開始的時候l和r分別為最左邊和最右邊。1 讓j減小,直到遇到 i 或者找到乙個小於...

演算法基礎 快速排序

要求 10分鐘內寫出快排!之前筆試用到排序演算法,總是想用快排但是又不能在規定時間寫出來,歸根到底還是快排的邏輯步驟沒有搞清,所以才導致每次失敗!徹底搞清快排動作邏輯,這樣即使長時間不用也能臨時寫出來!思路 1.就像選擇排序每排一次序排好最小 大值一樣,快速排序每排一次序 會 將中軸值 預設取陣列第...