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