過年的時(shí)候大家聚在一起打撲克陪捷,從兩副混合撲克中挑選出完整的一副回窘。一般我會(huì)按照一定的順序來找。
- ?市袖,從A到K啡直。
- ?,從A到K苍碟。
- ?酒觅,從A到K。
- ?微峰,從A到K舷丹。
- 再找到大小王就算一副找全了。
這其實(shí)也可以說是選擇排序了蜓肆,每次挑選出某種花色最小的一個(gè)颜凯,然后第二小的。仗扬。症概。一直找到K。
正文
選擇排序(Selection sort)
- 算法描述
在要排序的一組數(shù)中早芭,選出最斜顺恰(或者最大)的一個(gè)數(shù)與第1個(gè)位置的數(shù)交換;然后在剩下的數(shù)當(dāng)中再找最斜朴选(或者最大)的與第2個(gè)位置的數(shù)交換精肃,依次類推,直到第n-1個(gè)元素(倒數(shù)第二個(gè)數(shù))和第n個(gè)元素(最后一個(gè)數(shù))比較為止帜乞。
初始值:??{49 27 65 97 76 12 38}
??第一趟:12 ??{27 65 97 76 49 38}
??第二趟:12 27 ??{65 97 76 49 38}
??第三趟:12 27 38 ??{97 76 49 65}
??第四趟:12 27 38 49 ??{76 97 65}
??第五趟:12 27 38 49 65 ??{97 76}
??第六趟:12 27 38 49 65 76 97??{}
- 算法實(shí)現(xiàn)
void selectSort(int *a ,int num) {
for (int i = 0; i < num - 1; i++) {
int index = i;
for (int j = i + 1; j < num; j++) {
if (a[j] < a[index]){
index = j; // 記錄位置
}
}
if (index != i) { //如果最小數(shù)位置變化則交換
int temp = a[index];
a[index] = a[i];
a[i] = temp;
}
}
}
堆排序(Heap Sort)
- 堆
在接觸“堆”這個(gè)概念之前,看到“堆”首先想到的就是“堆內(nèi)存”的“堆”筐眷。黎烈。。
根據(jù)堆-百度百科的資料匀谣,堆必須同時(shí)具備兩個(gè)特性:
1.堆總是一棵完全二叉樹照棋。
2.堆中某個(gè)節(jié)點(diǎn)的值總是不大于或不小于其父節(jié)點(diǎn)的值。
由于其它幾種堆(二項(xiàng)式堆武翎,斐波納契堆等)用的較少烈炭,一般將二叉堆就簡稱為堆。 - 堆排序
以如下無序數(shù)組A為例
4 | 5 | 3 | 2 | 6 | 1 |
---|
-
將該數(shù)組按順序排列為完全二叉樹(堆特性1)
A[i]的左節(jié)點(diǎn)為A[2i+1],右節(jié)點(diǎn)為A[2i+2]宝恶,父節(jié)點(diǎn)為A[i/2]符隙。從數(shù)組索引的角度描述了數(shù)字與數(shù)字在二叉樹中的位置關(guān)系趴捅。
-
一個(gè)數(shù)組想用堆排序,首先要把數(shù)組堆化(堆特性2)