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)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值