排序问题二(简单选择排序)

简单选择排序

【引言】
简单选择排序的基本思想在于,在待比较的数中找出最小的数,然后比较其他数,直到排序完成。例:第一趟,比较N个数,将第一个数与其他数比较,与比它小的数交换。第二趟,比较N-1个数,将第一个数(在N-1中的第一个数)与其他数比较,与比他小的数交换。第三趟………
依次进行下去我们就依次找出来最小的数,第二小的数……

  • 代码如下:
#include<stdio.h>
#define NUM 10

void main(){
    int i,j,min,temp;
    int vote[NUM];

    printf("请输入要比较的%d个数.\n",NUM);

    for(i=0;i<NUM;i++){//输入
        printf("请输入第%d个数:",i+1);
        scanf("%d",&vote[i]);
    }

    printf("排序前:");

    for(i=0;i<NUM;i++){//比较前输出
        printf("%d\t",vote[i]);
    }

    printf("\n");

    for(i=0;i<NUM-1;i++){//外层循环:NUM个数比较NUM-1趟
        min=i;//每趟开始前将vote【i】赋值给vote【min】。保证最开始时vote【min】始终为第一个数。

        for(j=i+1;j<NUM;j++){//里层循环:每个数比较(NUM-i-1)趟。        j=i+1表示:在后面的判断时与vote【min】比较的数为第i个数后面的一个数。

            if(vote[j]<vote[min]){
                min=j;//如果vote【min】比它后一个数大,则把j赋值给min。即min中始终要存放最小的数的脚标。
            }

        }

        if(i != min){//结束一趟比较后,如果i不是最小的数,则此时把vote【min】中的值赋给vote【i】
            temp = vote[i];
            vote[i] = vote[min];
            vote[min] = temp;
        }

    }

    printf("排序后:");//输出

    for(i=0;i<NUM;i++){
        printf("%d\t",vote[i]);
    }

}
  • 运行结果
    运行结果

  • 简单选择排序其实与冒泡排序类似,不过平均时间与复杂度比冒泡排序稍低。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值