蓝桥杯真题宝藏排序详解 | 冒泡排序 选择排序 插入排序

简介: 蓝桥杯真题宝藏排序详解 | 冒泡排序 选择排序 插入排序

宝藏排序:

冒泡排序解题思想:

算法步骤

比较相邻元素,如果第一个大于第二个则交换。

从左往右遍历一遍,重复第一步,可以保证最大的元素在最后面

重复上述操作,可以得到第二大、第三大...

比较方法

给定一个长度为n的列表,算法循环n-1次可以得到有序序列

第一次循环两两比较:<a[0],a[1]>..., a[n-4],a[n-3]>, a[n-3],a[n-2]>, <a[n-2],a[n-1

第二次循环两两比较: <a[0],a[1]>...., <a[n-4],a[n-3]> , a[n-3],a[n-2]>

第三次循环两两比较: <a[0],a[1 ]>,...,<a[n-4],a[n-3]

第i次循环两两比较: <a[0],a[1]>,..., a[n-i-1],a[n-i]>

第n-1次循环两两比较:<a[0],a[1]

时间复杂度:O(n^2),空间复杂度O(1),稳定

代码详解:

n = int(input())
a = list(map(int,input().split()))
# map函数:将逗号左边的数据依次分隔后以逗号右边的数据类型返回
 
# 循环n-1次,每次获得第n大
for i in range(1, n):
    # 每次比较a[j]和a[j + 1]
    for j in range(0, n - i):
        if a[j] > a[j + 1]:
            a[j], a[j+1] = a[j+1], a[j]
 
print(' '.join(map(str, a)))    # ' '.可以将输出的内容用空格隔开

选择排序解题思想:

算法步骤:

从左往右找到最小的元素,放在起始位置

重复上述步骤,依次找到第2小、第3小元素...

比较方法:

给定一个长度为n的列表,算法循环n-1次可以得到有序序列

第0次循环从[0,n-1]中找最小元素a[x],与a[0]交换

第1次循环从[1,n-1]中找最小元素,与a[1]交换

第2次循环从[2,n-1]中找最小元素,与a[2]交换

第i次循环从[i,n-1]中找最小元素,与a[i]交换

第n-2次循环从[n-2,n-1]中找最小元素,与a[n-2]交换

时间复杂度: O(n^2),空间复杂度O(1),稳定

代码详解:

n = int(input())
a = list(map(int, input().split()))
 
for i in range(n-1):
    # 第i次从i到n-1找最小值
    min_value = a[i]
    min_idx = i
    for j in range(i, n):
        if a[j] < min_value:
            min_value = a[j]
            min_idx = j
    # 将最小值和最前面的元素交换
    a[min_idx], a[i] = a[i], a[min_idx]
 
print(' '.join(map(str, a)))

插入排序解题思想:

算法步骤:

第一个元素看做已排序,从左往右遍历每一个元素:

在已排序元素中从后往前扫描:如果当前元素大于新元素,则该元素移动到后一位

重复第二步直至找到小于等于新元素则停止

比较方法:

口将上述步骤看做摸牌,每次摸一张牌从后往前判断是否可以插入

   对于第i张牌a[i],[0,i-1]中的牌都是已经排好顺序的

   从后往前逐个判断a[i]是否大于a[i]

       如果a[i]>a[i]:则a[i]往后挪一个位置

       如果alij]<=a[i]:此时在a[j+1]的位置放置a[i]

时间复杂度:O(n^2),空间复杂度O(1),不稳定

代码详解:

n = int(input())
a = list(map(int,input().split()))
 
# 对于第i个数字,从后往前找对应插入的位置
for i in range(1, n):
    value = a[i]
    insert_idx = 0    # 插入元素的下表
    for j in range(i - 1, -1, -1):    # 左闭右开,从i-1到0,步长为-1
        if a[j] > value:
            # 往后挪
            a[j + 1] = a [j]
        else:
            insert_idx = j + 1
            break
    # 插入第i个数字

 

相关文章
|
机器学习/深度学习 算法 搜索推荐
蓝桥杯丨高级排序
蓝桥杯丨高级排序
61 0
|
算法 搜索推荐
蓝桥杯丨简单排序
蓝桥杯丨简单排序
85 0
|
2月前
|
算法
蓝桥杯宝藏排序 | 数据结构 | 快速排序 归并排序
蓝桥杯宝藏排序 | 数据结构 | 快速排序 归并排序
|
6月前
|
人工智能 算法 搜索推荐
蓝桥杯宝藏排序题目算法(冒泡、选择、插入)
以下是内容的摘要: 本文介绍了三种排序算法:冒泡排序、选择排序和插入排序。冒泡排序通过不断交换相邻的逆序元素逐步排序,最坏情况下需要 O(n^2) 次比较。选择排序在每轮中找到剩余部分的最小元素并放到已排序序列的末尾,同样具有 O(n^2) 时间复杂度。插入排序则是将每个元素插入到已排序序列的正确位置,时间复杂度也是 O(n^2),但空间复杂度为 O(1)。
|
7月前
蓝桥杯真题代码记录(数位排序
蓝桥杯真题代码记录(数位排序
52 0
|
7月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-493 合并排序数组
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-493 合并排序数组
49 0
|
7月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-97 排序
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-97 排序
31 0
|
7月前
|
算法 Java
②【Java 组】蓝桥杯省赛真题解析 [振兴中华] [三部排序] 持续更新中...
②【Java 组】蓝桥杯省赛真题解析 [振兴中华] [三部排序] 持续更新中...
58 0
|
7月前
|
存储
蓝桥杯-1/14天-数位排序【继承Comparable接口实现排序】
蓝桥杯-1/14天-数位排序【继承Comparable接口实现排序】
|
搜索推荐
蓝桥杯历年真题题解----2020年-- 排序
蓝桥杯历年真题题解----2020年-- 排序