基礎排序小結

2021-09-26 02:36:25 字數 1809 閱讀 7733

#include

intquick_select

(int a,

int l,

int r,

int k)

//這裡將a【p】與最後乙個數交換,它為什麼要這樣做請看接下來的**

int i = l, j = r;

//首先把l和r賦值給i和j

while

(i < j)

//在這一步我們也會發現最後面的元素已經被i所在的元素賦值了,而當前的i還存著應該放在後面的值,所以後面會把這個值替換

while

(i < j && a[j]

> x) j--

;//從尾部往前走,找出比x大的值 放在i的位置,通過上面的步驟,你會發現那個i的值已經存放在別的地方

if(i < j)

//第一次操作從頭比較時,當i=0時就陣列就換成了49,38,97,13,65,76,49(x儲存了27,所以不用擔心!),然後j=5;

}//從後開始比較時,j=3時,13<27,所以放在i的地方,即取代49,變成13,38,97,13,65,76,49(後面是一樣的)

a[i]

= x;

//通過上面的迴圈操作,就會發現最後i=j,同時i左邊的數都比x小,i右邊的數都比x大,最後把缺少的數(也就是x)放上去

p = i;

if(i - l +

1== k)

return a[i]

;//如果滿足條件,就說明這就是要找的數所以直接返回這個值

if(i - l +

1< k)

return

quick_select

( _______a,i+

1,r,k-

(i-l+

1)______________________ )

;//填空

else

return

quick_select

(a, l, i -

1, k)

;//通過分析i-l+1 和k 的大小來進行選擇操作,因為此時i - l + 1的值大小就是這個值在排序後的位置

}//選擇操作:如果i-l+1比k大,那就說明k所代表的值在左邊,否則就在右邊,然後再進行重複的遞迴操作

intmain()

;printf

("%d\n"

,quick_select

(a,0,14

,5))

;return0;

}

#include

int main (

) k = n/2;

while

( k >0)

a[j+k]

= t;

} k = k/2;

}for

( i =

0; i < n; i++

)return0;

}

堆排序(最小堆性質)

#include

int h[

101]

;int n;

void swap (

int x,

int y )

void siftdown (

int i )

if( t != i )

else

flag =1;

}return;}

void creat (

)return;}

int deletemax (

)int main (

)

快速排序小結

快速排序 1 基本思想 在待排序的陣列的 n 個元素中取乙個元素 一般取第乙個 將其移動到這樣的位置 在其之前的元素的值都小於它,在其之後的元素都大於它,這樣是一趟快速排序 然後對陣列的兩個部分進行同樣的操作,直到每部分只有乙個記錄為止 總之,每趟使表的第乙個元素放在適當位置,將表兩分,再對兩子表進...

排序演算法小結

1 快速排序 quicksort 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來說,它是歸併排序的就地版本。快速排序可以由下面四步組成。1 如果不多於1個資料,直接返回。2 一般選擇序列最左邊的值作為支點資料。3 將序列分成2部分,一部分都大於支點資料,另外一部分都小於支點資料。4...

排序演算法小結

1 歸併排序 3.區別與聯絡 遞迴是從未知推到已知,相當於把未知的東西壓入棧,等到可以算出結果了,就一步一步出棧。迭代是從已知到未知,從已知的東西一步一步推至目標。遞迴與迭代就好像一對逆元。遞迴的 更加清晰,但開銷更大,也更容易出錯,除錯較困難 而迭代的 編寫更困難,但速度和開銷較小。4.空間占用 ...