c - 我的程序关于选择排序有什么问题?

标签 c

这是教科书的示例。但当我验证程序时,发现书上的答案是错误的。我找不到代码错误的地方。 感谢您的帮助!

我已经运行了代码。没有语法错误。

#include<stdio.h>

int main() {
    int a[10], i, j, k, x;

    printf("Input 10 numbers:\n");
    for (i = 0; i < 10; i++) {
        scanf("%d", &a[i]);
    }

    printf("\n");
    for (i = 0; i < 9; i++) {
        k = i;
        for (j = i + 1; j < 10; j++) {
            if (a[j] < a[k]) {
                k = j;
            }
            if (i != k) {
                x = a[i];
                a[i] = a[k];
                a[k] = x;
            }
        }
    }

    printf("the sorted numbers:\n");
    for (i = 0; i < 10; i++) {
        printf("%d ", a[i]);
    }
    printf("\n");
} 

输出错误。

例如: 输入10个数字: 1 3 2 4 6 5 7 8 11 9

排序后的数字: 1 3 2 4 5 6 7 8 9 11

最佳答案

问题是交换检查位于错误的位置。它位于内循环中,但需要位于内循环之后(但位于外循环内部)。代码的排序部分应该是:

for(i=0; i<9; i++){
  k=i;
  for(j=i+1; j<10; j++){
    if(a[j]<a[k]){
      k=j;
    }
  }
  if(i!=k){
    x=a[i];
    a[i]=a[k];
    a[k]=x;
  }
}

请注意,if(i!=k) 检查现在位于内部循环之后,而不是内部循环内部。

使用以下输入:

Input 10 numbers:
1 3 2 4 6 5 7 8 11 9

它现在生产:

the sorted numbers:
1 2 3 4 5 6 7 8 9 11 

关于c - 我的程序关于选择排序有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57735998/

相关文章:

c - 为什么我可以使用不存在的类型的 typedef?

代码编译等,但只是卡在运行

c - 检测断开连接的客户端而不阻塞 (C)

c - realloc 损坏源内存

c - malloc函数将所有数据分配到同一内存地址

c - 获取字符输入并将其存储在数组中

c - 在接收消息时继续使用 select() 计算超时?

c - win32 api编辑控件和键盘加速器

c - 将参数传递给函数

objective-c - 从 if 语句中断到 else 部分