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

来源:互联网 发布:java数据库代码生成器 编辑:程序博客网 时间:2024/05/19 15:21

简单选择排序

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

  • 代码如下:
#include<stdio.h>#define NUM 10void 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]);    }}
  • 运行结果
    运行结果

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

1 0
原创粉丝点击