选择排序算法
与冒泡排序法的区别是,排序过程中,是最小数与其余无序数进行比较。不需要像冒泡法一样,比较的每一次都要交换相邻两个数,而是:
比较第一趟时,先固定第一个数,比较第一个数与其余未固定的数(其余为固定的数叫做无序数)的大小,后面的数小于固定数的,交换两者顺序(先交换他们的标签,直到这一趟跑完,选出这一趟的最小数,再交换两者位置,选出的第一个固定数就是这个数列的最小数)。
再比较第二趟…直到第n-1趟,同上。
c代码如下,在vs2017下使用(如有错误,范请指正):
#include <stdio.h>
#define N 10
int main()
{
int a[N]={0};
int i=0,j,tmp;
int mindex;
while(i<N){
scanf_s("%d",&a[i]);
if(a[i]==0) break;
i++;
}
for(i=0;i<N-1;i++){
mindex=i;
for(j=i+1;j<N-1;j++)
if(a[j]<a[mindex]){
mindex=j; //交换标签
}
if(mindex!=i){ //提升效率,当前比较值是最小值时,可不交换。
t=a[mindex]; //最小的数才与固定数交换位置。
a[mindex]=a[i];
a[i]=t;
}
for(i=0;i<N;i++)
printf(“a[%d]=%d\n”,i,a[i]);
}
}