c - 函数不适用于 C 程序选择排序

标签 c function sorting selection-sort

为什么这个功能在这里不起作用?它不对输出进行排序。 假设如果我输入 1 4 2,输出始终是 1 4 2 而不是 1 2 4。

如何正确实现这种选择排序?

提前致谢!!

#include <stdio.h>

int selection_sort (int a[],int n, int i, int j,int temp,int min){

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

   for(i=0;i<n;i++){
        min=i;
      for(j=i+1;j<n;j++){
         if(a[j]<a[min]){
            min=j;
         }
      }
      temp=a[i];
      a[i]=a[min];
      a[min]=temp;
   }
}
int main(){

   int i, j, n,a[20], temp,min;

   printf("How many elements:\n ");
   scanf("%d",&n);

   printf("Enter array elements:\n");
    for(i=0;i<n;i++)
      scanf("%d",&a[i]);

printf("Sorted array: ");
   for(i=0;i<n;i++)
      printf(" %d",a[i]);
    return 0;
    selection_sort(i,j,n,a,temp,min);

}

最佳答案

您的代码中有 3 个主要问题:

  1. 您收到两次用户输入。 main 函数中的一个:

    printf("Enter array elements:\n");
    for(i=0;i<n;i++)
      scanf("%d",&a[i]);
    

    selection_sort 函数中的另一个:

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

    通过删除 selection_sort 函数中的函数来修复此问题。

  2. 正如评论部分所述,您在调用 selection_sort 函数之前从 main 函数返回:

    return 0;
    

    通过将其移动到 main 函数的末尾来修复此问题。

  3. 在调用 selection_sort 函数之前,您将打印它的预期结果:

    printf("Sorted array: ");
    for(i=0;i<n;i++)
      printf(" %d",a[i]);
    ...
    selection_sort(i,j,n,a,temp,min);
    

    通过在打印结果之前调用 selection_sort 来修复此问题。

这是固定代码:

#include <stdio.h>

int selection_sort (int a[], int n, int i, int j, int temp, int min)
{
   for(i=0;i<n;i++) {

        min=i;

        for(j=i+1;j<n;j++) {

           if(a[j]<a[min]) {

              min=j;
           }
        }

        temp=a[i];
        a[i]=a[min];
        a[min]=temp;
   }
}

int main()
{
    int i, j, n,a[20], temp, min;
    
    printf("How many elements: ");
    scanf("%d",&n);
    
    printf("Enter array elements: ");
    for(i=0;i<n;i++) {

        scanf("%d",&a[i]);
    }
    
    selection_sort(a, n, i, j, temp, min);

    printf("Sorted array:");
    for(i=0;i<n;i++) {

        printf(" %d", a[i]);
    }
    printf("\n");
    
    return 0;
}

这是一个测试:

$ gcc main.c && ./a.out
How many elements: 3
Enter array elements: 1 4 2
Sorted array: 1 2 4

关于c - 函数不适用于 C 程序选择排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69081701/

相关文章:

C++类成员变量重新赋值

javascript - Ember 对来自 ember-data 模型关联的另一个 Controller 的数据进行排序

Javascript 首先对重复值进行排序,然后从小到大的值排序

c - rand() 在 valgrind 中使用时生成不同的值

c - 变量类型 int32_t、int64_t 等

c - 将参数分配给局部变量时从不兼容的指针类型进行分配

c++ - 如何通过函数参数返回动态数组?

javascript - 比较每个数值的总和后如何对数组元素进行排序和列出

c++ - RC 文件更改会默默失败; "Cannot open the resource file for edit"

c - 在 C 中用 int 初始化一个 char