[C语言]选择法排序:用选择法对10个整数从小到大排序。请使用数组实现。

试题描述:

用选择法对10个整数从小到大排序。请使用数组实现。

输入

输入10个整数,相邻两项之间用一个空格隔开。

输出

输出从小到大排序后的整数,相邻两项之间用一个空格隔开。

输入示例

46 73 62 11 5 3 52 32 98 23

输出示例

3 5 11 23 32 46 52 62 73 98

数据范围

输入输出均为int范围的整数

先来看一张图来回顾一下什么是选择排序(图片来自网络)

我们先来实现最基础的部分

#include <stdio.h>
#include <stdlib.h>
int main() {
	int a[10],i,j,q,m;
	scanf("%d %d %d %d %d %d %d %d %d %d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&a[9]);

即输入数组,由于我打这段代码的时候旁边有人在外放DYKS所以情绪有些暴躁所以选择了简单粗暴的方法,可根据个人习惯修改

之后是排序部分:从图不难看出,该排序法需要两层迭代,一层是从左往右顺序依次检索,另一层则是从每个起始端再次向右检索,依次来保证左<右,因此:

	for(i=0;i<10;i++){            //总迭代循环:按从0开始从左往右顺序依次检索
		for(j=i;j<10;j++){        //次迭代循环:变换初始值,来从初始值检索======
			int min=a[i];         //这里设最开始的初始值为 局部变量min        ↑ 接着循环返回
			if(a[j]<a[i]){        //条件:若在之后的检索中发现比初始值小的值  ↑ 再执行一遍
				min=a[j];         //先把 较小值赋值给min以防丢失             ↑ 直到a[9]为止
				a[j]=a[i];        //然后再把初始值赋值给较小值完成替换        ↑ 数组的值被检索
				a[i]=min;         //最后把较小值值赋值给初始值=================  完毕
			}
		}
	}

 最后打印该数组:

	for(q=0;q<10;q++){
		printf("%d",a[q]);
		printf(" ");
	}
	return 0;
}

综上,最终代码: 

#include <stdio.h>
#include <stdlib.h>
int main() {
	int a[10],i,j,q,m;
	scanf("%d %d %d %d %d %d %d %d %d %d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&a[9]);
	for(i=0;i<10;i++){
		for(j=i;j<10;j++){
			int min=a[i];
			if(a[j]<a[i]){
				min=a[j];
				a[j]=a[i];
				a[i]=min;
			}
		}
	}
	for(q=0;q<10;q++){
		printf("%d",a[q]);
		printf(" ");
	}
	return 0;
}

(解法不唯一,仅供参考)

  • 11
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值