排序演算法:選擇排序
阿新 • • 發佈:2019-01-31
一、原理
(1) 從整個陣列中找到最小值,並將其移動至第0位
(2) 從第1位到最後陣列找到最小值,並將其移動至第1位
…
(n) 從第(n-1)位到最後陣列找到最小值,並將其移動至第(n-1)位
實現可以使用雙巢狀迴圈,第一層指定陣列起點,第二層取出最小值。
二、實現
#include <cstdio>
int main() {
// 輸入
int n;
scanf("%d", &n);
int i;
int j;
int data[n + 5];
for(i = 0; i < n; i++) {
scanf ("%d", &data[i]);
}
// 排序
int temp;
for(i = 0; i < n; i++) {
int minindex = i; // 存放i~n之間最小元素的角標(index)
for(j = i; j < n; j++) if(data[j] < data[minindex]) minindex = j; // 如果想從大到小排列則將此處的小於號換成大於號
temp = data[i];
data[i] = data[minindex];
data[minindex] = temp;
}
// 輸出
for(i = 0; i < n; i++) {
printf("%d ", data[i]);
}
return 0;
}
三、思考
本演算法的實現會造成陣列的遍歷進行n*n次,有何更佳方法以減少時間消耗?
參考:詳解選擇排序和對其優化 - GodLike