學習記錄 排序演算法總結

2022-09-10 14:06:25 字數 2315 閱讀 4391

1.桶排序

準備乙個已經確定順序的序列,要求被排序的元素為有序序列的子集,挨個對應之後按照順序取出就是桶排序了

1 #include2

int max(int* a,int

len);

3int

main()4;

6int len=10;7

//獲取陣列中最大值,即桶的上限

8int maxnum=max(a,len);

9int b[50]=;

10//

向桶中放入元素

11for(int i=0;i)

1215

//按照桶的順序依次取出

16for(int i=0;i<=len;i++)

1721

return0;

22}23int max(int* a,int

len)

2432}33

return

max;

34 }

缺點:對於空間跨度較大的序列,空間利用率極低

2.氣泡排序

對於從小到大的順序,我們從最後一位向前遍歷,凡是發現逆序的相鄰元素便交換位置,一路交換到頭則一定會把最小的元素放到首位,這樣最多重複n(元素總數量)次即可完成排序

1 #include2

void swap(int* a,int*b);

3int

main()4;

6int len=10;7

for(int i=0;i)813

for(int i=0;i)

1417

return0;

18}19//

注意指標

20void swap(int* a,int*b)

21

3.快速排序

基本思想為,一次排序似的資料分成兩個部分,並且保證其中一部分的所有元素都大於另一部分的所有元素。

在一次排序中首先選擇乙個基準元素作為判斷值,比它大的放一邊,小的放另一邊。

這裡我們永遠把第乙個元素作為基準,指標i從第二個元素向後尋找,遇到第乙個不小於基準的元素就停下,指標j從最後乙個元素向前找,遇到第乙個小於基準的元素則停下,當ij都停下後交換元素。

1 #include2

void qs(int* a,int l,int

r);3

intmain()4;

6int len=10

;7 qs(a,0,9);8

for(int i=0;i)912

return0;

13}14//

注意!當基準值為min或max時的情況處理

1516

void qs(int* a,int l,int

r)1738}

39//

為了避免i=j時候出現bug,卡在0,1無限遞迴

40if(i==j)

41 j--;

42int t=a[l];

43 a[l] =a[j];

44 a[j] =t;

4546

if(j>l)

47qs(a,l,j);

48if(i49qs(a,i,r);

50 }

同時由於分治的策略,快排可以使用平行計算的方法提高速度。

4.插入排序

認為左部分開始都是排好序的,每次迴圈從右部分第乙個開始向前比較,如果小就前移直到移動到合適的位置

1 #include2

void qs(int* a,int l,int

r);3

intmain()4;

6int len=10;7

for(int i=1;i)817

}18for(int i=0;i)

1922

return0;

23 }

5.希爾排序

希爾排序為插入排序的一種改良,通過一定的步長將原序列分組進行排序,旨在減少部分不必要的交換次數

1 #include2

void qs(int* a,int l,int

r);3

intmain()4;

6int len=10;7

//按照長度的一半進行分組,下一次再減半

8for(int i=len/2;i>=1;i=i/2)9

23}24}

25}26for(int i=0;i)

2730

return0;

31 }

6.選擇排序

最接近人的思維,從全域性挑一最小的放第一,再挑個第二的放第二,這裡不放**了。

排序演算法學習記錄

口述思路 內外雙迴圈,內迴圈中當 n n 1 時,進行資料對調,目的就是為了讓n永遠為最小的數,以此類推,我們的排序一般都是從左向右,左邊是最小的,右邊是最大的。口述思路 特點就是運用遞迴,單個迴圈體,預設要將第乙個n設為middle變數,然後迴圈開始後,將大於middle的記錄到right變數中 ...

排序演算法學習記錄

特點 從左到右開始,右邊每次都輪結束都出現乙個最大數。即右邊的數依次先排列好。時間複雜度 o n 2 空間複雜度 o 1 氣泡排序 第一層迴圈,若上一回遍歷結束,有交換資料操作 繼續挨個遍歷。每完成一次找到乙個最大數置於後邊。第二層遍歷,每次遍歷都比上一回,少遍歷乙個數 判斷大小。void mpso...

演算法學習記錄 排序 希爾排序

希爾排序 直接插入排序在在本身數量比較少的時候情況下效率很高,如果待排數的數量很多,其效率不是很理想。回想一下直接插入排序過程,排序過程中,我們可以設定一條線,左邊是排好序的,右邊則是乙個乙個等待排序,如果最小的那個值在最右邊,那麼排這個最小值的時候,需要將所有元素向右邊移動一位。是否能夠減少這樣的...