开发者社区> 问答> 正文

c语言,选择排序法,,我排的运行结果不对,求助高手,,谢谢

c语言,选择排序法,,我排的运行结果不对,求助高手,,谢谢

展开
收起
知与谁同 2018-07-19 18:59:45 1402 0
3 条回答
写回答
取消 提交回答
  • #include<stdio.h>

    int main()
    {
    int i,j,t,a[10];  // 帮你去掉了变量k,min
    printf("请输入10个数:\n");
    for(i=0;i<10;i++)
    scanf("%d",&a[i]);
    for(i=0;i<=9;i++)
    {
    // 帮你去掉了k=i赋值操作
    for(j=i+1;j<=9;j++)
    {
    // 帮你去掉了min=a[k]操作
    if(a[j]<a[i]) // 这里采取第二层循环跟第一层循环比较法
    {
    t=a[i];      // 这里进行交换
    a[i]=a[j];
    a[j]=t;
    }
    }
    }
    for(i=0;i<9;i++) // 输出,以空格隔开,并且循环到最后一个的前一个,也就是第九个
    printf("%d ",a[i]);
    printf("%d\n",a[9]);   // 将最后一个输出,目的在于将格式保持好。
    return 0;
    }

    你的有点凌乱,帮你改了一下,建议到编译器上去写,不要到手机上写。手机上毕竟不方便。

    2019-07-17 22:50:21
    赞同 展开评论 打赏
  • 杀人者,打虎武松也。
    for(i=0;i<9;i++){
    k = i;
    for(j=k+1;j<10;j++)
    if(a[k] > a[j])
    k = j;
    if(k!=i){
    t = a[k];a[k]=a[i];a[i]=t;
    }
    }
    2019-07-17 22:50:21
    赞同 展开评论 打赏
  • 阿里云开发者社区运营负责人。原云栖社区负责人。
    中间的两层for循环改成这样:
    for(i=0;i<=9;i++)
    .... for(j=i+1;j<=9;j++)
    .....{
    ..........if(a[i]<a[j])
    ............{
    .................t=a[i];a[i]=a[j];a[j]=t;
    ............}else ;
    .....}
    其余部分不用动。
    你写的这个为什么非得定义一个最小值呢。实际上,我上面这一段a[i]中就是时刻都是最小值,没有必要.。你增加了中间变量之后,徒徒增加了你自己的脑袋负担,搞得逻辑复杂,更容易让自己出错,你说是不是。
    2019-07-17 22:50:21
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载