礎演算法--排序: 之選擇排序
阿新 • • 發佈:2018-11-12
三種簡單排序的區別:
氣泡排序是 未排序部分,相鄰元素之間兩兩比較移動,從而找出最值。
插入排序是 某個待排序元素與以排元素兩兩比較, 從而找到待排元素所應在的位置
選擇排序是 在未排部分,一次遍歷找到最大值,然後將其置於未排部分的末尾位置。
選擇排序、氣泡排序,都是遍歷未排序部分, 所不同的是:
選擇排序,遍歷時,不進行移動,而是標記出最大值所在的索引
而氣泡排序,遍歷時,兩兩比較,移動頻繁。
因此,選擇排序的效率要高於氣泡排序。
以下是摘自網路上的圖示:
各種排序演算法實現的關鍵:
在設計各個具體演算法程式碼時, 關鍵之處是弄清楚 哪些元素是未排的,哪些元素是已經排好的。
即分清: 未排元素 與 以排元素的分界線
程式程式碼:
[cpp] view plaincopy
- void StraightSelectionSort(int *p, int n)
- {
- int i,j,t;
- int indexMax;
- for (i=0;i<n;i++) // 0....n-1
- {
- // 未排元素 0...n-1-i 以排元素 n-i...n-1
- for (j=0,indexMax=0;j<n-i;j++)
- {
- if (p[j]>=p[indexMax])
- {
- indexMax=j;
- }
- }
- t=p[n-i-1];
- p[n-i-1]=p[indexMax];
- p[indexMax]=t;
- }
- }