• python选择排序


            先上动图。橘色代表已经完成排序的数字,红色记录的是本轮循环最小值的索引,绿色表示红色与绿色进行比较。

            选择排序的核心:不停的比较两个数,找出最小值,然后把找出的最小值想办法放在数组前面。

            基本思路:

            1,假设第一个数最小,然后拿这个数与后面的数依次比较,如果发现更小的数,则立即记录更小的数的索引。一轮循环完成之后,如果索引变化,则利用索引将找到的最小值换到第一个位置。

            2,经过上一轮的操作,最小的数已经出现在第一个位置,现在假设第二个位置的数最小,然后再剩下的数中再找出最小的数放在第二个位置。

            3,假设第三个数最小,……

            4,经过n-1轮循环,数组最后那个数天然的为最大值。排序完成。

    目录

    一,选择排序需要循环多少轮才能完成排序?

    二,选择排序每轮循环如何获得最小值?

    三,选择排序如何将每轮比较得到的最小值放在数组前面?

    四,选择排序每轮循环需要两两比较多少次?

    六,python实现选择排序


    一,选择排序需要循环多少才能完成排序?

            答:若n为排序数字的个数,则需要n-1轮。理由:假设有n个数,则需要找n-1个当前轮的最小值放在数组前面,此时数组最后面的那个数天然为最大值(都找了n-1次最小值了,剩下的那个自然是最大的)。

    二,选择排序每轮循环如何获得最小值?

            假设一个位置的数为最小值,然后把这个数与后面的数依次进行比较,就可能会发现比假设数更小的数。

    三,选择排序如何将每轮比较得到的最小值放在数组前面?

            每轮循环中,一旦发现比假设值更小的值,则立即就更小值的索引,本轮循环完成之后将最小值换道假设值的位置。

    四,选择排序每轮循环需要两两比较多少次?

            答:(n-当前轮数)次。假设7个数循环第一轮,第一次需要比较7-1=6次。

    六,python实现选择排序

    1. import random
    2. def select_sort(arr):
    3. arr_length = len(arr) # 获取列表长度
    4. circle_num = 0 # 一开始第一轮假设arr[0]的值最小,故设置circle_num=0。
    5. # 第二轮的时候假设arr[1]最小,故外层第一次循环结束前需要circle_num += 1
    6. min_index = circle_num # min_index记录最小值的索引
    7. while circle_num < arr_length - 1:
    8. index = circle_num + 1 # index从当前轮数的下一个数开始
    9. while index < arr_length: # 排序核心,比较两个数的大小,下标从circle_num + 1开始一直比较到列表最后一个元素
    10. if arr[index] <= arr[min_index]:
    11. min_index = index # 记录最小那个数的索引
    12. index += 1
    13. if min_index != circle_num: # 如果发现比假设值更小的数,则根据记录的索引交换两个数
    14. arr[circle_num], arr[min_index] = arr[min_index], arr[circle_num]
    15. circle_num += 1 # +1进入下一轮
    16. if __name__ == '__main__':
    17. arr_test = [int(random.random() * 100) for i in range(10)]
    18. print('排序之前的列表:')
    19. print(arr_test)
    20. select_sort(arr_test)
    21. print('排序之后的列表:')
    22. print(arr_test)
  • 相关阅读:
    Jenkins CI/CD 流程
    在虚拟机安装Hadoop
    bootstrap5 常用类大全
    波束形成中的主瓣宽度
    java项目调用python进程
    JUC_8锁问题
    Qt4中学习使用QtCharts绘图六:绘制动态曲线
    X(推特)“鸡贼”手段曝光:这些广告并没有标注,你知道吗?
    嵌入式学习之Linux驱动(第九期_设备模型_教程更新了)_基于RK3568
    CdSe/ZnTe Ⅱ型核壳量子点/核壳型功能/SiC碳化硅量子点的合成
  • 原文地址:https://blog.csdn.net/weixin_44992737/article/details/125494270