【问题标题】:Clarification on Selection sort?关于选择排序的说明?
【发布时间】:2017-01-31 19:43:46
【问题描述】:

我在做 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 语言中简单地拼凑一个简单选择排序的示例,那就太好了!

【问题讨论】:

    标签: c arrays algorithm sorting selection-sort


    【解决方案1】:

    是的,正确的:

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


    中的简单选择排序:

    #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

    【讨论】:

      猜你喜欢
      • 2020-07-30
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      • 2012-07-27
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多