文章目录
一、选择排序
1. 概念
下标 | 1 | 2 | 3 | 4 | 5 | 最小值 |
---|---|---|---|---|---|---|
原始 | 4 | 3 | 5 | 2 | 1 | / |
第一次 | 1 | 3 | 5 | 2 | 4 | 1 |
第二次 | 1 | 2 | 5 | 3 | 4 | 2 |
第三次 | 1 | 2 | 3 | 5 | 4 | 3 |
第四次 | 1 | 2 | 3 | 4 | 5 | 4 |
完成 | 1 | 2 | 3 | 4 | 5 | / |
选择排序
从待排序的区间中找到最小元素的位置,并将该元素与该区间的第一个元素交换位置。这样通过 n − 1 n-1 n−1 次选择未排序部分的最小元素,将其放在正确位置从而达到对整个序列进行排序的效果。
2. 伪代码
for (i = 1 ~ n-1) # 轮数
int minp = i; # 设擂主(位置)
for (j = i+1 ~ n) # 打擂台
if (a[j] < a[minp])
minp = j;
end if
end for
swap(a[i], a[minp]);
end for
3. 程序
#include <iostream>
using namespace std;
int n;
int a[1005];
void selectionSort(int a[], int n)
{
for (int i = 1; i <= n-1; i++)
{
int minp = i; // 设擂主所在的下标
for (int j = i+1; j <= n; j++) // 打擂台
{
if (a[j] < a[minp])
{
minp = j;
}
}
swap(a[i], a[minp]);
}
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
selectionSort(a, n);
for (int i = 1; i <= n;