使用while 和for 循环实现随机数冒泡排序

 主要思路为

1)创建数量为n的随机数列表。

2)通过两两比对将较大值放在后面的办法选出n个数字里面的最大值max1。

3)通过两两比对将较大值放在后面的办法选出n - 1个数字里面的最大值max2,同时将最大值放在n - 1个数字序列的最后。

4)循环执行步骤3,直到选出max(n)到max1,此时max(n) <= max(n-1) <= max(n-2)......<= max2 <= max1,最终得到随机数的从小到大排列。

也可以只使用for循环实现。

import random
list1 = [] #创建随机数空列表
num = 0
num2 = int(input('需要数字列表内数字的数量为: ')) #指定随机数数量
while num < num2: #创建指定数量随机数并添加到空的随机数列表中
    x = random.randint(1,100)
    list1.append(x)
    num += 1
print(list1)
print()
while num2 > 0:
    for i in range(num2):
        if i < (num2 - 1): #避免出现b = list1[i + 1] out of range问题
            a = list1[i] #将相邻两个数字分别赋值给a和b
            b = list1[i + 1]
            print(i,a,b) #展示要比较的两个数字的位置和值
            if a > b: #比较相邻两个数字大小,并将大的赋值给后者,确保最大的数永远在后面
                list1[i] = b
                list1[i + 1] = a
    print(list1)
    num2 -= 1
print(list1)

 以下为执行结果:

需要数字列表内数字的数量为: 10
[43, 97, 56, 69, 49, 66, 84, 60, 55, 16]
# 第1次循环,在range(10),也就是list1全部范围内两两比较
0 43 97 #比较list1【0】和list1【1】
1 97 56 #两者后者较大,顺序不变
2 97 69 #比较list1【1】和list1【2】,前者较大,将前者值赋值给后者,后者值赋值给前者,list1【1】=56,list2【2】=97
3 97 49 #比较list1【2】和list1【3】,list1【3】值变为97
4 97 66 #比较list1【3】和list1【4】,list1【4】值变为97
5 97 84
6 97 60
7 97 55
8 97 16
[43, 56, 69, 49, 66, 84, 60, 55, 16, 97] #第1次循环找到了range(10)共10个数字的最大值97
#第2次循环,在range(9)共9个数字里找出最大值84
0 43 56
1 56 69
2 69 49
3 69 66
4 69 84
5 84 60
6 84 55
7 84 16
[43, 56, 49, 66, 69, 60, 55, 16, 84, 97]
#第3次循环,在range(8)共8个数字里找出最大值69
0 43 56
1 56 49
2 56 66
3 66 69
4 69 60
5 69 55
6 69 16
[43, 49, 56, 66, 60, 55, 16, 69, 84, 97]
#第4次循环,在range(7)共7个数字里找出最大值66
0 43 49
1 49 56
2 56 66
3 66 60
4 66 55
5 66 16
[43, 49, 56, 60, 55, 16, 66, 69, 84, 97]
#第5次循环,在range(6)共6个数字里找出最大值60
0 43 49
1 49 56
2 56 60
3 60 55
4 60 16
[43, 49, 56, 55, 16, 60, 66, 69, 84, 97]
#第6次循环,在range(5)共5个数字里找出最大值56
0 43 49
1 49 56
2 56 55
3 56 16
[43, 49, 55, 16, 56, 60, 66, 69, 84, 97]
#第7次循环,在range(4)共4个数字里找出最大值55
0 43 49
1 49 55
2 55 16
[43, 49, 16, 55, 56, 60, 66, 69, 84, 97]
#第8次循环,在range(3)共3个数字里找出最大值49
0 43 49
1 49 16
[43, 16, 49, 55, 56, 60, 66, 69, 84, 97]
#第9次循环,在range(2)共2个数字里找出最大值43
0 43 16
[16, 43, 49, 55, 56, 60, 66, 69, 84, 97]
#第10次循环直接打印list1
#在第10次循环中,num2值已为1,不满足i < (num2 - 1)
[16, 43, 49, 55, 56, 60, 66, 69, 84, 97]
#程序最后输出结果:
[16, 43, 49, 55, 56, 60, 66, 69, 84, 97]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值