十大算法 — 选择排序法【C语言代码诠释】

#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;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王睿丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值