鱼C论坛

 找回密码
 立即注册
查看: 3033|回复: 5

[学习笔记] 浅谈选择排序

 关闭 [复制链接]
回帖奖励 2 鱼币 回复本帖可获得 2 鱼币奖励! 每人限 1 次
抢楼 抢楼 本帖为抢楼帖,欢迎抢楼! 
发表于 2021-3-18 19:53:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
        今天来谈谈选择排序,选择排序就是重复“从待排序数据中寻找最小值,将其与序列最左边的数字进行交换”
        比如有六个数 :6,1,7,8,9,3。第一次在这六个数中寻找出最小值,于是我们找到了1,将最小值与序列最左边的6进行交换,最小值1归位,此时序列变为1,6,7,8,9,3(见图1)。不过最小值已经在左边了,接下来就不需要任何操作了。       第二次在余下的数据中(即:6,7,8,9,3)寻找最小值,于是我们又找到了3。将数字3与左边第二个数字6进行交换,最小值3归位,此时序列变为1,3,7,8,9,6。       如此进行五次排序得到1-3-6-7-8-9。


       按此规律寻找下去可以知道:对6个数需要进行5次排序,在第一次排序中需要比较5次,第二次排序中需要比较4次。
       那么对n个数进行排序:对n个数需要进行n-1次排序,在第一次排序中需要比较n-1次,在第j次排序中需要比较n-j次。
选择排序.png
      例子(和上面稍稍不同哟,寻找的是最大值,并放到最后面)
#include <stdio.h>
int compare(int a[],int length);   //定义函数用来从数组中找出最大值 。
int compare(int a[],int length)
{
        int i,max=0;
        for(i=1;i<length;i++)
        {
       
                if(a[i]>a[max])
                {
                        max=i;
                }
        }
        return max;               //返回最大值的序号。
}
int main()
{
        int a[10],i,j,temp;
        printf("please enter ten numbers:");
        for (i=0;i<10;i++)
        {
                scanf("%d",&a[i]);
        }
        for(i=0;i<9;i++)
        {
                j=compare(a,10-i);       //将最大值的序号赋值给j。
                temp=a[j];              
                a[j]=a[9-i];
                a[9-i]=temp;                    //将最大值放到最后的位置
        }
        printf("the result is:");
        for(i=0;i<10;i++)
        {
                printf(" %2d ",a[i]);
        }
        return 0;
       
       
}

唉!马上就要开学了,自学编程的时间越来越少了,不过还要加油啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-3-18 19:54:06 | 显示全部楼层

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-3-18 21:14:52 | 显示全部楼层

回帖奖励 +2 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-3-18 21:49:19 From FishC Mobile | 显示全部楼层

回帖奖励 +2 鱼币

不是开学3周了吗
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-3-18 21:52:36 From FishC Mobile | 显示全部楼层
Minecraft程序猿 发表于 2021-3-18 21:49
不是开学3周了吗

河北还没开学,在家网课
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-3-18 21:53:35 From FishC Mobile | 显示全部楼层
无情的心 发表于 2021-3-18 21:52
河北还没开学,在家网课

哦,山东的初中早开学了...呜呜...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-6 17:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表