資料結構學習筆記-簡單選擇排序

zeta186012發表於2024-06-04

簡單選擇排序的演算法設計與分析

問題描述:設計並分析簡單選擇排序

【演算法設計思想】

迭代選擇: 演算法透過迴圈遍歷陣列,進行 size 次迭代。

最小值選擇: 在每次迭代 (i) 中,演算法致力於找到未排序子陣列 (arr[i] 到 arr[size-1]) 內最小元素的索引。這個最小元素將被選出來進行交換。

交換: 一旦最小元素的索引 (minIndex) 被確定,它就會與當前索引 (i) 處的元素進行交換。這實際上將最小元素放置在未排序子陣列開頭的正確排序位置。

漸進排序: 每次迭代,排序子陣列都會增長一個元素,最終導致整個陣列在迴圈結束時按升序排序。

【演算法描述】

void selectionSort(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        int minIndex = i;
        for (int j = i + 1; j < size; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        swap(arr[i], arr[minIndex]);
    }
}

【完整的測試程式】

#include <iostream>
using namespace std;

void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

void selectionSort(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        int minIndex = i;
        for (int j = i + 1; j < size; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        swap(arr[i], arr[minIndex]);
    }
}

int main(int argc, char const *argv[]) {
    int arr[6] = {1, 2, 3, 5, 3, 2};
    int size = sizeof(arr) / sizeof(arr[0]);
    selectionSort(arr, size);
    printArray(arr, size);
    return 0;
}

相關文章