7-10 选择排序

现请参照如下示意图,实现选择排序:

输入格式:

一组由空格间隔的数字

输出格式:

第一行为一组由空格间隔的数字,从左至右已经按从小到大的顺序排好;
第二行为排列过程中进行的交换次数(请注意上图中有的轮数并未交换,所以交换次数不等于轮数。)

输入样例:

7 3 8 1 5

输出样例:

1 3 5 7 8
2

 题解

先创建一个列表然后输入数据再进行切片,然后计算列表的长度用数据n保存起来,以方便后续的循环可以使用,然后再一层循环中用min保存这次的第一个值的坐标,然后进入第二层循环(第二层循环从第一个循环保存的值开始,到数据的最后一个值)然后判断在二层循环里面寻找到值最小的坐标,用min保存起来,退出第二个循环后判断min是否等于第一层循环的初始赋值,若相等则说明不需要交换,若不相等则需要交换,并且记录交换次数。随后在一行中打印列表的数据,因为python的print函数会自动有一个换行输出,所以用一个参数将其换掉用end=‘ ’。然后用print("")只输出一个换行符。随后输出交换过的次数。

代码实现

a=list(input().split())    //用列表保存数字并且进行切片
count=0    //保存交换次数
n=len(a)
for i in range(n-1):    //循环到0-n-1个数据
    min=i
    for j in range(i,n):    //从i-n个数据即最后一个数据
        if a[j]<a[min]:    //若有比它小的数字则保存下标
            min=j
    if min!=i:    
        a[i],a[min]=a[min],a[i]    //交换数据
        count=count+1    //记录交换的次数
for i in range(0,n-1):
    print(a[i],end=' ')    //输出数据,以空格分开
print(a[-1],end='')    //最后一个数据后输出不能存在空格
print("")    //输出换行符
print(count) //输出交换的次数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小侯不躺平.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值