癞蛤蟆丶ccc 发表于 2020-11-16 15:24:38

C语言选择排序

那个选择排序 不是要先找到最小值才能和前面的数交换吗 我想不通怎么找到那个最小值      大佬帮帮我吧

jackz007 发表于 2020-11-16 16:28:00

       先假定数组中的第一个就是最小、最大的数,然后利用循环与每一个其它元素比较,如果不符合那就更新。#include <stdio.h>

main(void)
{
       int d , k , min , max                     ;
       printf("请输入10个整数 : ")                     ;
       for(k = 0 ; k < 10 ; k ++) scanf("%d" , & d) ;
       for(min = max = d , k = 1 ; k < 10 ; k ++) {
               if(d < min) min = d               ;
               else if(d > max) max = d          ;
       }
       printf("min = %d\tmax = %d\n" , min , max)      ;
}

sunrise085 发表于 2020-11-16 17:11:32

#include <stdio.h>
int main(void)
{
    int d,i,j,k,temp;
    printf("请输入10个整数 : ");
    for(k = 0 ; k < 10 ; k ++)
      scanf("%d" , &d);
    for(i = 0;i < 9;i++)//两层循环,外层循环,每次循环就排列一个数,内存循环是寻找剩下的数中最小的数的下标
    {
      k=i;//先假定剩下的数中,首个为最小值,然后通过内层循环,与之后的数进行比较,找最小值
      for(j = i+1;j < 10;j++) //内层循环,从i+1开始,寻找剩下的数中最小值的下标
      {
            if(d < d)
                k=j;
      }
      //下面三行,将下标为k的值与当前下标i的值互换
      temp = d;
      d = d;
      d = temp;
    }
    for(k = 0 ; k < 10 ; k ++)
      printf("%d",d);
    return 0;
}

严凯 发表于 2020-11-16 18:11:58

jackz007 发表于 2020-11-16 16:28
先假定数组中的第一个就是最小、最大的数,然后利用循环与每一个其它元素比较,如果不符合那就更新 ...

你这个代码明显有问题啊。你这个输入十个数字。比如说我从零输到九。然后k零的话就是零。开始先是最小值和最大值都等于零。然后可以领分别和k一到k九比较。你会发现每一个都比k0大那么输出的最小值就是k0为0,但是最大值呢?最大值也k0吗?这不就出问题了吗

jackz007 发表于 2020-11-16 18:38:17

严凯 发表于 2020-11-16 18:11
你这个代码明显有问题啊。你这个输入十个数字。比如说我从零输到九。然后k零的话就是零。开始先是最小值 ...

       先不要那么自信,你是来求助的,把代码编译、运行过后再评价不迟。

严凯 发表于 2020-11-16 19:05:55

jackz007 发表于 2020-11-16 18:38
先不要那么自信,你是来求助的,把代码编译、运行过后再评价不迟。

不是啊,不是你来求助的吗?哈哈哈。。。。。。

严凯 发表于 2020-11-16 19:07:01

jackz007 发表于 2020-11-16 18:38
先不要那么自信,你是来求助的,把代码编译、运行过后再评价不迟。

我的我的,我看错了,我以为你是楼主,。。。。。。。等一下回寝室上机试试,我们多交流交流

癞蛤蟆丶ccc 发表于 2020-11-16 19:09:10

本帖最后由 癞蛤蟆丶ccc 于 2020-11-16 23:46 编辑

sunrise085 发表于 2020-11-16 17:11


兄弟 你这个我看懂了 也运行了
我感觉我写的和你的很像 但是我的就是不排序 帮我看下吧
#include<stdio.h>
int main()
{
    int n, i, j, temp, k, a;
    scanf("n=%d", &n);
    for (i = 0; i < n; i++)
      scanf("%d", &a);      a[]i显示不出来
    for (i = 0; i < n; i++)
    {
      k = i;
      for (j = i + 1; j < n + 1; j++)
      {
            if (a < a)
            {
                k = j;
            }

      }
      if (i != k)    //看k是不是i的那个位置
      {
            temp =a; a =a;a = temp;
      }
    }

    for (i = 0; i < n; i++)
      printf("%d\n", a);
    return 0;
}

if里面哪一行是a不知道为什么网页显示不出来 a 方括号i

癞蛤蟆丶ccc 发表于 2020-11-16 19:17:42

严凯 发表于 2020-11-16 19:07
我的我的,我看错了,我以为你是楼主,。。。。。。。等一下回寝室上机试试,我们多交流交流

楼主已经被选择排序 弄得心态炸裂了

风过无痕1989 发表于 2020-11-16 21:46:45

本帖最后由 风过无痕1989 于 2020-11-16 21:47 编辑

癞蛤蟆丶ccc 发表于 2020-11-16 19:09
兄弟 你这个我看懂了 也运行了
我感觉我写的和你的很像 但是我的就是不排序 帮我看下吧
#include


程序看起来都差不多,但是细节决定一切,你的程序帮你修改好了

#include<stdio.h>
int main()
{
        int n, i, j, temp, k, a;
        scanf("%d", &n);                   // 控制格式错误,不能写成 n=%d
        for (i = 0; i < n; i++)
                scanf("%d", &a);            // 对数组元素赋值,需要带上下标
        for (i = 0; i < n; i++)
        {
/*        k = i;*/                         // 此语句没有必要
                for (j = 0; j <= n - 1; j++)   // n + 1 出界了
                {
                        if (a < a)
                        {
                                temp = a;
                                a = a;
                                a = temp;

                        }

                }
/*        if (i != k)    //看k是不是i的那个位置
                {
                        temp = a; a = a;a = temp;
                }*/                                 // 此段程序没有必要
        }

        for (i = 0; i < n; i++)
                printf("%d", a);             // 输出数组要带上下标,控制格式中不要换行,不美观
        printf("\n");                     // 在此加一个换行
        return 0;
}

sunrise085 发表于 2020-11-16 23:41:01

风过无痕1989 发表于 2020-11-16 21:46
程序看起来都差不多,但是细节决定一切,你的程序帮你修改好了

你直接给人家把算法修改了。。人家需要的是选择排序,你给改成了冒泡排序了。

癞蛤蟆丶ccc 发表于 2020-11-16 23:43:39

风过无痕1989 发表于 2020-11-16 21:46
程序看起来都差不多,但是细节决定一切,你的程序帮你修改好了

这是冒泡呀

sunrise085 发表于 2020-11-16 23:46:11

癞蛤蟆丶ccc 发表于 2020-11-16 19:09
兄弟 你这个我看懂了 也运行了
我感觉我写的和你的很像 但是我的就是不排序 帮我看下吧
#include


你的程序问题是下标错误,外层循环结束条件是i<n-1,内存循环的结束条件是j<n

发代码请用代码格式,否则会出错误,你这个是因为系统把下标i当做斜体了。不会发代码请看下面帖子:新手学习

风过无痕1989 发表于 2020-11-17 00:00:22

sunrise085 发表于 2020-11-16 23:41
你直接给人家把算法修改了。。人家需要的是选择排序,你给改成了冒泡排序了。

多谢指点,我上机时见报错,就直接修改了

风过无痕1989 发表于 2020-11-17 00:00:56

癞蛤蟆丶ccc 发表于 2020-11-16 23:43
这是冒泡呀

好吧,我飘过了

癞蛤蟆丶ccc 发表于 2020-11-17 00:05:16

sunrise085 发表于 2020-11-16 23:46
你的程序问题是下标错误,外层循环结束条件是i

改了也不对

癞蛤蟆丶ccc 发表于 2020-11-17 00:06:25

sunrise085 发表于 2020-11-16 23:46
你的程序问题是下标错误,外层循环结束条件是i

先睡觉吧 不早了 明天再弄吧

sunrise085 发表于 2020-11-17 19:44:16

癞蛤蟆丶ccc 发表于 2020-11-17 00:06
先睡觉吧 不早了 明天再弄吧

#include<stdio.h>
int main()
{
    int n, i, j, temp, k, a;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
      scanf("%d", &a);
    for (i = 0; i < n-1; i++)
    {
      k = i;
      for (j = i + 1; j < n ; j++)
      {
            if (a < a)
            {
                k = j;
            }

      }
      if (i != k)    //看k是不是i的那个位置
      {
            temp =a; a =a;a = temp;//这里最后一句你是不是写成a了?
      }
    }

    for (i = 0; i < n; i++)
      printf("%d\n", a);
    return 0;
}

癞蛤蟆丶ccc 发表于 2020-11-17 20:34:44

sunrise085 发表于 2020-11-17 19:44


对对对{:9_228:}
页: [1]
查看完整版本: C语言选择排序