1.桶排序
準備乙個已經確定順序的序列,要求被排序的元素為有序序列的子集,挨個對應之後按照順序取出就是桶排序了
1 #include2int 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 #include2void 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 #include2void 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 #include2void 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 #include2void 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...
演算法學習記錄 排序 希爾排序
希爾排序 直接插入排序在在本身數量比較少的時候情況下效率很高,如果待排數的數量很多,其效率不是很理想。回想一下直接插入排序過程,排序過程中,我們可以設定一條線,左邊是排好序的,右邊則是乙個乙個等待排序,如果最小的那個值在最右邊,那麼排這個最小值的時候,需要將所有元素向右邊移動一位。是否能夠減少這樣的...