关于选择排序的澄清?

时间:2016-09-23 04:05:06

标签: c arrays algorithm sorting selection-sort

我正在做C,我遇到了选择排序。我很确定我理解它,但只是想确定一下。 (请不要将此问题标记为副本,因为还有其他问题需要处理选择排序 - 这比理解应用更多。

我的理解是(以伪代码形式):

循环显示数字:将第一个数字设置为最低。循环完成其余部分,将每个新数字检查到当前最低数字。如果新数字较低,则将其设置为新的最低值。循环后,我们知道最低的。

将当前最低元素与未排序数组的第一个元素交换。现在这是“已排序”部分的一部分。循环遍历数组的未排序部分(除第一个元素之外的所有部分)并找到新的最低元素并将其分配给“最低”。与第一个未排序的元素交换最低。重复。

for i = 1 to n - 1
  min = i
  for j = i + 1 to n
    if array[j] < array[min]
      min = j
  if min != i
    swap array[min] and array[i]

如果我在任何地方都离开,请告诉我。

此外,如果有人可以在简单的选择排序的实际C中拼凑一个快速示例,那就太棒了!

1 个答案:

答案 0 :(得分:2)

是的正确:

  

选择排序是搜索和排序的组合。在每次传递期间,具有最小(或最大)值的未排序元素被移动到阵列中的适当位置。排序通过数组的次数比数组中的项数少一个。

中的简单选择排序:

#include <stdio.h>

int main()
{
   int array[100], n, c, d, position, swap;

   printf("Enter number of elements\n");
   scanf("%d", &n);

   printf("Enter %d integers\n", n);

   for ( c = 0 ; c < n ; c++ )
      scanf("%d", &array[c]);

   for ( c = 0 ; c < ( n - 1 ) ; c++ )
   {
      position = c;

      for ( d = c + 1 ; d < n ; d++ )
      {
         if ( array[position] > array[d] )
            position = d;
      }
      if ( position != c )
      {
         swap = array[c];
         array[c] = array[position];
         array[position] = swap;
      }
   }

   printf("Sorted list in ascending order:\n");

   for ( c = 0 ; c < n ; c++ )
      printf("%d\n", array[c]);

   return 0;
}

输出:

C02QT2UBFVH6-lm:~ gsamaras$ gcc -Wall main.c 
C02QT2UBFVH6-lm:~ gsamaras$ ./a.out 
Enter number of elements
4
Enter 4 integers
1
2
6
-7
Sorted list in ascending order:
-7
1
2
6

Source