选择排序的C程序
选择排序算法是一种通过找到数组中最小的数字并将其放置在第一个位置的逐个查找算法。下一个要遍历的数组将从最小数字放置的位置的下一个索引开始。
让我们通过一个例子来更清楚地理解这个概念。
我们有一个数组{6, 3, 8, 12, 9},在这个数组中最小的元素是3。所以我们将3放置在第一个位置,此后,数组看起来是{3, 6, 8, 12, 9}。现在我们将再次找到最小的数字,但这次我们不会在搜索中考虑3,因为它已经在它的位置上。找到下一个最小元素是6,创建一个数组,在第二个位置上有6,然后再次在数组中进行搜索,直到数组排序完毕。
选择排序算法的工作过程−
选择排序算法遵循以下步骤
让我们来看一个数组{20, 12, 23, 55, 21}。
- 将数组的第一个元素设为最小值。
最小值 = 20
- 将最小值与下一个元素进行比较,如果比最小值小,则将该元素设为最小值。重复此过程直到数组末尾。
与12比较: 20 > 12,最小值 = 12
与23比较: 12 < 23,最小值 = 12
与55比较: 12 < 55,最小值 = 12
与21比较: 12 < 21,最小值 = 12
- 将最小值放在数组的第一个位置(索引0)。
数组 = {12, 20 ,23, 55, 21}
- 下一次迭代从第一个未排序的元素开始,即最小值所放置的元素的下一个元素。
数组 = {12, 20 ,23, 55, 21}
搜索从20开始,即最小值所在的下一个元素。
迭代2:
最小值 = 20
与23比较: 20 < 23,最小值 = 20
与55比较: 20 < 55,最小值 = 20
与21比较: 20 < 21,最小值 = 20
最小值不变。
数组 = {12, 20 ,23, 55, 21}
迭代3:
最小值 = 23
与55比较: 23 < 55,最小值 = 23
与21比较: 23 > 21,最小值 = 21
最小值移到索引2处
数组 = {12, 20, 21, 55, 23}
迭代4:
最小值 = 55
与23比较: 23 < 55,最小值 = 23
最小值移到索引3处
数组 = {12, 20, 21, 23, 55}
示例
#include <stdio.h>
int main() {
int arr[10]={6,12,0,18,11,99,55,45,34,2};
int n=10;
int i, j, position, swap;
for (i = 0; i < (n - 1); i++) {
position = i;
for (j = i + 1; j < n; j++) {
if (arr[position] > arr[j])
position = j;
}
if (position != i) {
swap = arr[i];
arr[i] = arr[position];
arr[position] = swap;
}
}
for (i = 0; i < n; i++)
printf("%d\t", arr[i]);
return 0;
}
输出
0 2 6 11 12 18 34 45 55 99