Python之简单排序(两种方法解决)


这里是一段防爬虫文本,请读者忽略。
本文原创首发于CSDN,作者IDYS
博客首页:https://blog.csdn.net/weixin_41633902/
本文链接:https://blog.csdn.net/weixin_41633902/article/details/107808008
未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!


简单选择排序

00. 概述

  • 简单选择排序
    • 属于选择排序
    • 两两比较大小,找出极值(极大值或极小值)被放置在固定的位置,这个固定位置一般指的是 某一端
    • 结果分为升序和降序排列
  • 降序
    • n个数从左至右,索引从0开始到n-1,两两依次比较,记录大值索引,此轮所有数比较完毕,将 大数和索引0数交换,如果大数就是索引0,不交换。第二轮,从1开始比较,找到最大值,将它 和索引1位置交换,如果它就在索引1位置则不交换。依次类推,每次左边都会固定下一个大数。
  • 和降序相反

01. 题目

  • 产生一个含有二十个随机数的列表,使用简单排序的方法将其排序

02. 解析

2.1 方法一

  • 演示
import random


def full_of_list(the_list):
    while True:
        the_list.append(random.randint(0,100))
        if len(the_list) == 20:
            break


a_list = []
full_of_list(a_list)
print(a_list)
count = 0
for i in a_list:
    Max = i
    k = count
    j = count
    while k < len(a_list):
        if a_list[k] > Max:
            Max = a_list[k]
            j = k
        k += 1
    if j != count:
        a_list[count], a_list[j] = a_list[j], a_list[count]
    count += 1


print(a_list)

  • 运行结果
[22, 55, 54, 30, 97, 93, 86, 47, 59, 44, 72, 90, 29, 3, 86, 85, 19, 48, 76, 75]
[97, 93, 90, 86, 86, 85, 76, 75, 72, 59, 55, 54, 48, 47, 44, 30, 29, 22, 19, 3]

2.1 方法一

  • 解析
  1. 在一轮循环中,既求其最大值又求其最小值,然后将最大值放在前面,最小值放在后面
  2. 如果在某一轮循环中,最大值等于最小值那么结束循环
  3. 判断其是否交换时,直接判断其值是否不等,而不必判断其索引情况
  • 演示
import random


def full_of_list(the_list):
    while True:
        the_list.append(random.randint(0,100))
        if len(the_list) == 20:
            break


a_list = []
full_of_list(a_list)
print(a_list)
for i in range(len(a_list) // 2):
    max_index= i
    min_index = -i - 1
    origin_min_index = min_index
    for j in range(i+1, len(a_list)-i):
        if a_list[j] > a_list[max_index]:
            max_index = j
        if a_list[-j-1] < a_list[min_index]:
            min_index = -j-1
    if a_list[max_index] == a_list[min_index]:
        break
    if max_index != i:
        a_list[max_index], a_list[i] = a_list[i],a_list[max_index]
        if i == len(a_list) + min_index:
            min_index = max_index
    if a_list[min_index] != a_list[origin_min_index]:
        a_list[min_index], a_list[origin_min_index] = a_list[origin_min_index],a_list[min_index]


print(a_list)
  • 运行结果
[99, 78, 49, 100, 42, 37, 75, 86, 61, 93, 84, 3, 92, 85, 33, 70, 20, 78, 33, 59]
[100, 99, 93, 92, 86, 85, 84, 78, 78, 75, 70, 61, 59, 49, 42, 37, 33, 33, 20, 3]

写在最后的话:

  • 无论每个知识点的难易程度如何,我都会尽力将它描绘得足够细致
  • 欢迎关注我的CSDN博客,IDYS’BLOG
  • 持续更新内容
    linux基础 | 数据通信(路由交换,WLAN) | Python基础 | 云计算
  • 如果你有什么疑问,或者是难题。欢迎评论或者私信我。你若留言,我必回复!
  • 虽然我现在还很渺小,但我会做好每一篇内容。谢谢关注!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值