C选择排序程序?

选择排序是一种攻击算法,该算法工作原理是从数组中找到一个最小的数字,然后将其放置在第一个位置。下一个要遍历的数组将从编号最小的位置旁边的索引处开始。

让我们举个例子来使这个概念更加清晰。

我们在这个数组中有一个数组{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