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) //输出交换的次数

猜你喜欢

转载自blog.csdn.net/m0_61886762/article/details/126962251