现请参照如下示意图,实现选择排序:
输入格式:
一组由空格间隔的数字
输出格式:
第一行为一组由空格间隔的数字,从左至右已经按从小到大的顺序排好;
第二行为排列过程中进行的交换次数(请注意上图中有的轮数并未交换,所以交换次数不等于轮数。)
输入样例:
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) //输出交换的次数