选择排序的详细讲解
选择排序是一种简单直观的排序算法,特别适合于教学和理解排序的基本概念。它的基本思想是:
- 在未排序部分找到最小(或者最大)的元素。
- 将这个元素与未排序部分的第一个元素交换位置。
- 将当前位置后面剩余的部分视为未排序部分,重复1和2的步骤,直到所有元素都被排序。
步骤
- 初始状态:整个数组未排序。
- 第一轮:找到数组中最小的元素,并将其与第一个元素交换位置。此时,第一个元素已经排好序。
- 第二轮:在剩余未排序部分中继续找到最小的元素,并将其与第二个元素交换位置。
- 重复上述步骤:直到所有元素都排好序。
C++实现
下面是详细的C++代码实现,包含中文注释,帮助你理解每一步操作。
#include <iostream>
#include <vector>
#include <algorithm> // 包含 std::swap
void swap(int &a,int &b) {
int c = a;
a = b;
b = c;
}
// 选择排序函数
void selectionSort(std::vector<int>& arr) {
for (int i = 0; i < arr.size();++i) {
int min = i;
for (int j = i; j < arr.size();++j) {
if (arr[j] < arr[min]) {
min = j;
}
}
if (min != i) {
swap(arr[i],arr[min]);
}
}
}
void printf(std::vector<int> &vec) {
for (int num:vec) {
std::cout << num <<",";
}
std::cout << std::endl;
}
int main() {
// 初始化一个数组
std::vector<int> arr = { 64, -3, 12, 22, 11 };
// 输出排序前的数组
std::cout << "排序后的数组: ";
printf(arr);
// 调用选择排序函数进行排序
selectionSort(arr);
// 输出排序后的数组
std::cout << "排序后的数组: ";
printf(arr);
return 0;
}