#include<stdio.h>
#define N 7
int main(int argc,char* argv[])
{
int i,j,x[N],min,temp;
//i,j→用于循环和数组下标、min→标记最小值,temp→交换两数的中间变量
printf("请输入7个数字:\n");
for(i=0;i<N;i++)
scanf("%d",&x[i]);
for(i=0;i<N-1;i++) //控制趟次
{
min=i; /*假设初始下标i就为最小值,那么下面一层的循环应从下一个数与它就行比较,而不应该再是自己比自己
那样是毫无意义的,∴ j=i+1 */
for(j=i+1;j<N;j++)
{
/*放入到全部数据里面去比大小,当比完第一趟以后第一个数
就一定是这个数组中的最大或者最小值,此时就无需再关顾第一个数
而应该是继续排序剩下来的所有数字,∴ j<N */
//如果有比min这个下标数组的值还要小的数,就标记住这个数,继续参与比较,这么下来,min标记的一定是最小值
if(x[min]>x[j])
min=j;
}
if(min!=i) /*说不定这个数从一开始就是一个有序的数,所以,判断如果min的下标从未发生过改变,那么说明这个数
排序后就肯定还是在原来的位置,那么此时无需再交换两数,保持这个位置就好 */
{
temp=x[min];
x[min]=x[i];
x[i]=temp;
}
}
printf("按从小到大排序为:\n");
for(i=0;i<N;i++)
printf("%d ",x[i]);
printf("\n");
return 0;
}
十大算法 — 选择排序法【C语言代码诠释】
最新推荐文章于 2024-06-12 10:14:05 发布