基础练习 数列排序 BASIC-13(python)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


题目

资源限制
内存限制:512.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
输入格式
第一行为一个整数n。
第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出格式
输出一行,按从小到大的顺序输出排序后的数列。
样例输入
5
8 3 6 4 9
样例输出
3 4 6 8 9


一、题目分析

首先我们可以看到,首行输入要排序的长度,那么就意味着要用到for循环,再加上待排序的数字,我们可以知道,这是一道非常简单的冒泡排序的题目。
冒泡排序什么意思呢,其实很简单,就是从左到右从第一个数开始,比如需要从小到大,那就先取出第一个数,依次和右边的数做对比,如果小了就选下一个数对比,如果大了的话就将此数与那个数做交换,然后用换过的数与后面的数做对比依次类推。这样,我们会发现从遍历第一次,第一个数一定是最小的,那么接下来我们从第二个数进行遍历,等等,依次类推,到最后一个数时,我们就会发现,数列从小到大排序好了。这显然不是最快捷的方法,单这个方法简单、无误,我们暂时不用考虑其他的方法。

二、解题思路

2.1代码详情

代码如下(示例):

n = int(input())  # 读取一个整数,表示有多少个数字
shuru = input()  # 读取输入的数字
shuchu = shuru.split()  # 将输入的字符串按空格分割成列表

# 使用双重循环进行冒泡排序
for i in range(n):
    for j in range(i + 1, n):
        if int(shuchu[i]) > int(shuchu[j]):
            # 交换两个元素
            temp = shuchu[j]
            shuchu[j] = shuchu[i]
            shuchu[i] = temp

# 输出排序后的结果
for i in range(n):
    print(int(shuchu[i]), end=" ")

1.n = int(input()) 读取一个整数 n,表示有多少个数字。
2.shuru = input() 读取一行输入,将其作为字符串。
3.shuchu = shuru.split() 将字符串按空格分割成列表。
4.使用双重循环进行冒泡排序,将列表中的元素按升序排列。
5.最后使用 print 语句输出排序后的结果,并确保输出的数字之间以空格分隔

2.2难点介绍

for i in range(n):
    for j in range(i + 1, n):
        if int(shuchu[i]) > int(shuchu[j]):
            # 交换两个元素
            temp = shuchu[j]
            shuchu[j] = shuchu[i]
            shuchu[i] = temp

1.for i in range(n):
这个外层循环的作用是遍历列表中的每一个元素。变量 i 从 0 到 n-1 变化,其中 n 是列表 shuchu 的长度。这个循环控制每次冒泡排序过程中的比较范围。

2.for j in range(i + 1, n):
内层循环用于比较和交换元素。变量 j 从 i+1 到 n-1 变化。内层循环确保只比较未排序部分的元素(即 i 之后的元素)。

3.if int(shuchu[i]) > int(shuchu[j]):
这行代码比较 shuchu[i] 和 shuchu[j] 的值。如果 shuchu[i] 的值大于 shuchu[j] 的值,则执行后续的交换操作。注意这里用 int() 函数将元素转换为整数进行比较,这意味着列表 shuchu 中的元素原本是字符串形式的数字。

4.temp = shuchu[j]
将 shuchu[j] 的值暂存到变量 temp 中。这一步是交换操作的一部分,用于临时保存值以便后续交换。

5.shuchu[j] = shuchu[i]
将 shuchu[i] 的值赋给 shuchu[j],实现 shuchu[j] 向前移动。

6.shuchu[i] = temp
最后一步将原来 shuchu[j] 的值(保存在 temp 中)赋给 shuchu[i],完成两个元素的交换。

总结

这段代码通过嵌套循环比较和交换列表 shuchu 中的元素,使得每次外层循环结束后,未排序部分中最大的元素逐渐移动到列表的后部。经过多次遍历,列表 shuchu 最终会变得有序。需要注意的是,这段代码实现的是一个简单版本的冒泡排序,与经典冒泡排序略有不同,因为经典冒泡排序的内层循环是从列表的开头到未排序部分的末尾,而这里是从 i+1 到列表的末尾。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值