簡單選擇排序的演算法設計與分析
問題描述:設計並分析簡單選擇排序
【演算法設計思想】
迭代選擇: 演算法透過迴圈遍歷陣列,進行 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;
}