栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python选择排序

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python选择排序

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

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

        基本思路:

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

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

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

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

目录

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

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

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

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

六,python实现选择排序


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

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

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

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

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

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

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

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

六,python实现选择排序
import random


def select_sort(arr):
    arr_length = len(arr)  # 获取列表长度
    circle_num = 0  # 一开始第一轮假设arr[0]的值最小,故设置circle_num=0。
    # 第二轮的时候假设arr[1]最小,故外层第一次循环结束前需要circle_num += 1
    min_index = circle_num  # min_index记录最小值的索引
    while circle_num < arr_length - 1:
        index = circle_num + 1  # index从当前轮数的下一个数开始
        while index < arr_length:  # 排序核心,比较两个数的大小,下标从circle_num + 1开始一直比较到列表最后一个元素
            if arr[index] <= arr[min_index]:
                min_index = index  # 记录最小那个数的索引
            index += 1
        if min_index != circle_num:  # 如果发现比假设值更小的数,则根据记录的索引交换两个数
            arr[circle_num], arr[min_index] = arr[min_index], arr[circle_num]
        circle_num += 1  # +1进入下一轮


if __name__ == '__main__':
    arr_test = [int(random.random() * 100) for i in range(10)]
    print('排序之前的列表:')
    print(arr_test)
    select_sort(arr_test)
    print('排序之后的列表:')
    print(arr_test)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/998233.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号