首页 > 编程语言 >fh-2022算法考试编程题-2

fh-2022算法考试编程题-2

时间:2022-09-19 22:25:41浏览次数:66  
标签:tmp end seq 编程 start 序列 2022 fh 排序

小A有一套特殊的卡牌,他们是1-N的数字的排列,每个数字有且仅有一张卡。

小A在洗牌之后,会把卡牌并排放在地上。

小A总是在通过卡牌的交换位置来获得1,2,3....N的序列。假如初始序列是2、3、5、4、1,我们就可以按照以下方式对它们进行排序: 

初始状态:2 3 5 4 1

第一次后:1 3 5 4 2

第二次后:1 3 2 4 5

第三次后:1 2 3 4 5 

所以,这里小A对卡牌进行了三次交换。

那么我们的问题是,给定一个特定卡牌序列,小A最少需要进行多少次互换才能达成她的目标。

测试用例:

[1]、输入 2,3,5,4,1 输出 3

[2]、输入 1,2,4,3,6,5,7 输出 2

# -*- coding:utf-8 -*-
# file: fun2.py
# author: 
# datetime: 2022/9/17
# software: PyCharm

def alg_sort(seq: list) -> int:
    """
    问题:按规定方式进行排序,例如
    由以上例子可知,该排序为选择排序的变种。
    首先,在未排序序列中找到最小值,放到排序序列的起始位置。然后,在未排序序列中找到最大值,放到排序排序的末端位置。
    以此规律对未排序序列继续排序,直至所有元素排序完毕。
    :param seq:待排序的序列,[a,b,c,d,e,...]
    :return: 排序所需次数
    """
    # 计数
    times = 0
    n_seq = len(seq)
    # 初始化起始和结束位置
    start = 0
    end = n_seq
    for i, _ in enumerate(seq):
        # 偶数位置找最小值
        if i % 2 == 0:
            # 未排序序列
            tmp_seq = seq[start:end]
            # 获取最小值和索引位置,此处min函数也可以自己使用for循环来判断
            mn = min(tmp_seq)
            ind = tmp_seq.index(mn)+start
            # 更新位置
            if start != ind:
                seq[ind] = seq[start]
                seq[start] = mn
                # print(seq)
                # 更新一次
                times += 1
            # 起始位置更新
            start += 1
        # 奇数位置找最大值
        else:
            # 未排序序列
            tmp_seq = seq[start:end]
            # 获取最小值和索引位置,此处max函数也可以自己使用for循环来判断
            mx = max(tmp_seq)
            ind = tmp_seq.index(mx)+start
            # 更新位置
            index_end = end - 1
            if index_end != ind:
                seq[ind] = seq[index_end]
                seq[index_end] = mx
                # print(seq)
                # 更新一次
                times += 1
            # 结束位置更新
            end -= 1
    print(times)
    return times


if __name__ == '__main__':
    # 测试用例
    # input_1 = [2, 3, 5, 4, 1]
    input_2 = [1, 2, 4, 3, 6, 5, 7]
    output = alg_sort(input_2)

 

标签:tmp,end,seq,编程,start,序列,2022,fh,排序
From: https://www.cnblogs.com/chentiao/p/16709302.html

相关文章

  • Java高并发编程详解 pdf
    高清扫描版下载链接:https://pan.baidu.com/s/1_2jbvt1OecV4j3uN59DxYQ点击这里获取提取码 ......
  • 做题记录整理树状数组2 P48 [SDOI2009] HH的项链(2022/9/19)
    P48[SDOI2009]HH的项链一眼莫队然而莫队就只有32分莫队毕竟是O(n根号n)的,肯定过不了我们思考一个区间[l,r],我们发现,如果从r开始往l数,那么每种数字只有最右边的那个......
  • CSP-J 2022 备战 乱七八糟字符串
     众所周知,字符串分为两大类:一.string类:主要操作:1.字符串长度输出:str.length()2.字符串比较:str1.compare(str2)如果结果是0则两个字符串完全相同3.字符串判空:str.em......
  • 2022icpc网络赛(I)
    目录A(预处理)C(结论/签到)D(打表)F(min25筛)G(dp+状态优化)H(模拟/签到)J(构造)K(dp+状态优化)L(dp)A(预处理)容易发现对于一段被0隔开的长度为\(n\)的连续的1,可以消去的0的个数为\(\lceil\f......
  • CMU15-445 FALL 2022 PROJECT #1 - BUFFER POOL
    CMU15-445PROJECT#1-BUFFERPOOL前言终于来到了Project#1了,这次是要实现三个组件,分别是ExtendibleHashTable,LRU-KReplacementPolicy,BufferPoolManage......
  • CSP2022游记
    本来不想说出题人不好的。但刚好抽到英语课课前演讲,主题是我最讨厌的人。没办法只好委屈出题人了ThetopicofmyspeechtodayisthepersonIhatethemost.Thepers......
  • 2022-09-19 hbuilder x编译uni项目卡在编译中
    嗯。。。en..............网友云:重装hbx,使用管理员运行。我没重装,重启了一下电脑,然后使用管理员运行,然并卵。我是这么个情况:wepy转uniapp,然后装完依赖后(没报错)就想运行......
  • 面向对象编程三大特征(封装、继承和多态)
    1基本介绍面向对象编程有三大特征:封装、继承和多态。2封装介绍3封装的理解和好处4封装的实现步骤(三步)5案例不能随便查看人的年龄,工资等隐私,并对设置的年......
  • springboot+Flink 接收、处理数据20220919
     1、pom.xml<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot......
  • Python多线程编程——threading模块
    本文参考:https://blog.csdn.net/youngwyj/article/details/124720041https://blog.csdn.net/youngwyj/article/details/124833126目录前言threading模块1.简介2.创建线......