将列表当中的元素进行排序

[编程入门]选择排序
时间限制: 2s 内存限制: 192MB 提交: 55007 解决: 28427
题目描述
用选择法对10个整数从小到大排序。
输入格式
输入10个无序的数字
输出格式
排序好的10个整数
样例输入
复制
4 85 3 234 45 345 345 122 30 12
样例输出
复制
3
4
12
30
45
85
122
234
345
345
提示


解法一

nums = list(map(int, input().split()))

# 外层循环,控制排序轮数
for i in range(len(nums) - 1):
    min_idx = i  # 初始化最小索引为当前位置
    # 内层循环,找出未排序部分的最小元素索引
    for j in range(i + 1, len(nums)):
        if nums[j] < nums[min_idx]:
            min_idx = j
    # 如果最小索引不是当前位置,交换元素
    if min_idx!= i:
        nums[i], nums[min_idx] = nums[min_idx], nums[i]

# 输出排序后的元素
for num in nums:
    print(num)

以下是选择排序的详细题解过程:

  1. 首先获取输入的 10 个无序数字并存入数组 nums
  2. 进入外层循环,从数组的第一个元素开始,到倒数第二个元素为止(因为最后一个元素无需再比较)。
  3. 对于每一轮外层循环,先假设当前位置的元素就是这一轮未排序部分的最小值,并记录其索引为 min_idx
  4. 然后通过内层循环,从当前位置的下一个元素开始到数组末尾,依次与假设的最小值比较。如果找到更小的元素,就更新 min_idx
  5. 当内层循环结束后,如果发现真正的最小值索引不是最初假设的索引(即 min_idx 发生了变化),则将当前位置的元素和真正的最小值元素进行交换。
  6. 这样就完成了一轮选择排序,即确定了当前未排序部分的最小值在正确的位置上。
  7. 重复以上步骤,直到整个数组都完成排序。
  8. 最后输出排序后的数组元素。

解法二

nums = list(map(int, input().split()))

# 外层循环,控制冒泡轮数,共进行数组长度-1 轮
for i in range(len(nums) - 1):
    # 标记是否发生交换
    flag = False
    # 内层循环,每一轮将最大的数“浮”到末尾
    for j in range(0, len(nums) - i - 1):
        if nums[j] > nums[j + 1]:
            nums[j], nums[j + 1] = nums[j + 1], nums[j]
            flag = True
    # 如果这一轮没有发生交换,说明已经排序完成,提前结束
    if not flag:
        break

for num in nums:
    print(num)

以下是冒泡排序的详细解题过程:

  1. 输入 10 个无序的整数,并存入数组 nums
  2. 进入外层的循环 i,它从 0 到数组长度减 1 进行迭代。这个循环控制冒泡的轮数。
  3. 在每一轮中,设置一个标志 flag 为 False,用于标记在这一轮中是否发生了交换。
  4. 开始内层循环 j,从 0 到数组长度减去当前轮数再减 1。这个内层循环用于比较相邻的元素。
  5. 如果当前元素 nums[j] 大于下一个元素 nums[j+1],则交换它们的位置,并将 flag 设置为 True,表示发生了交换。
  6. 当内层循环结束后,检查 flag。如果 flag 仍然为 False,说明在这一轮中没有发生交换,即数组已经是有序的,此时可以提前结束排序。
  7. 继续进行下一轮外层循环,重复上述步骤,直到整个数组排序完成。
  8. 最后输出排序后的数组元素。

在这个过程中,每一轮都会将当前未确定位置的最大元素“冒泡”到数组的末尾,经过多轮后,数组就会按照从小到大的顺序排列。


解法三

nums = list(map(int, input().split()))
sorted_nums = sorted(nums)
for num in sorted_nums:
    print(num)

以下是解题过程:

  1. 首先通过 input().split() 获取用户输入的以空格分隔的整数字符串列表。
  2. 然后使用 map(int,...) 将这些字符串转换为整数,并将结果存储在 nums 列表中。
  3. 接着调用内置函数 sorted()nums 列表进行排序,它会返回一个排好序的新列表 sorted_nums
  4. 最后通过遍历 sorted_nums 列表并逐个输出元素,得到排序后的结果。

sorted() 函数会按照默认的升序对列表进行排序,非常方便快捷地实现了排序操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值