蓝桥杯 排序

在这里插入图片描述
要使交换次数最多并且最短,肯定是逆序。
先写一个冒泡排序,并在排序过程中统计交换次数,然后尝试几个逆序的字母排列(不断在前面加下一个字母),很容易试出来刚好超过100次的字符串(onmlkjihgfedcba),为105次。
然后对字符串进行处理,减少5次交换,即将某一个字母向前移动5位,因为题目要求字典序最小,所以肯定是将第六个字母(j)放在首位(使o不位于首位)。

def s(lis: list):
    cnt = 0
    for i in range(len(lis)):
        for j in range(0, len(lis)-i-1):
            if lis[j] > lis[j+1] :
                lis[j], lis[j+1] = lis[j+1], lis[j]
                cnt += 1
    print(cnt)

s(list("nmlkjihgfedcba")) # 91
s(list("onmlkjihgfedcba")) # 105
s(list("jonmlkihgfedcba")) # 100

版权声明:本文为milk_paramecium原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。