C选择排序程序?
选择排序是一种攻击算法,该算法工作原理是从数组中找到一个最小的数字,然后将其放置在第一个位置。下一个要遍历的数组将从编号最小的位置旁边的索引处开始。
让我们举个例子来使这个概念更加清晰。
我们在这个数组中有一个数组{6,3,8,12,9},最小的元素是3。因此我们将3放在第一个位置,此后的数组将类似于{3,6,8,12,129}。现在,我们将再次找到最小的数字,但是这次我们将不在搜索中考虑3,因为它已代替了它。找到下一个最小的元素6,在第二个位置创建一个数组,其第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
最小值移入索引3Array={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