1. 程式人生 > >排序演算法:選擇排序

排序演算法:選擇排序

一、原理

(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