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