蓝桥杯宝藏排序题目算法(冒泡、选择、插入)

简介: 以下是内容的摘要:本文介绍了三种排序算法:冒泡排序、选择排序和插入排序。冒泡排序通过不断交换相邻的逆序元素逐步排序,最坏情况下需要 O(n^2) 次比较。选择排序在每轮中找到剩余部分的最小元素并放到已排序序列的末尾,同样具有 O(n^2) 时间复杂度。插入排序则是将每个元素插入到已排序序列的正确位置,时间复杂度也是 O(n^2),但空间复杂度为 O(1)。

冒泡排序:


def bubble_sort(li):            # 函数方式
    for i in range(len(li)-1):
        exchange=False
        for j in range(len(li)-i-1):
            if li[j]>li[j+1]:
                li[j],li[j+1]=li[j+1],li[j]
                exchange=True
        
        if not exchange:
            return


选择排序:


从左往右找到最小的元素,放在起始位置;重复上述步骤,依次找到第2小、第3小元素...


第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):  # 一共n-1!
    min = i  # 每次默认第一个值为最小值
    for j in range(i + 1, n):
        if a[j] < a[min]:
            min = j
    a[i], a[min] = a[min], a[i]
 
print(' '.join(map(str, a)))


插入排序:


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


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


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


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


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


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


如果a[i]>a[i]:则a[i]往后挪一个位置;如果a[i]<=a[i]:此时在aj+1]的位置放置a[i]


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


for i in range(1,len(li)):  # 功n-1,i表示摸到牌的下标
        tmp=li[i]  # 每次摸的牌
        j=i-1      # 手里最右侧的
        while j>=0 and li[j]>tmp:    # 一直往左走
            li[j+1]=li[j]    # 右移
            j-=1
        li[j+1]=tmp   # 选好位置了
相关文章
|
1月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
93 8
|
1月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
100 7
|
2月前
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
蓝桥杯Python编程练习题的集合,涵盖了从基础到提高的多个算法题目及其解答。
113 3
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
|
2月前
|
算法 搜索推荐 Java
数据结构与算法学习十三:基数排序,以空间换时间的稳定式排序,速度很快。
基数排序是一种稳定的排序算法,通过将数字按位数切割并分配到不同的桶中,以空间换时间的方式实现快速排序,但占用内存较大,不适合含有负数的数组。
36 0
数据结构与算法学习十三:基数排序,以空间换时间的稳定式排序,速度很快。
|
2月前
|
算法
蓝桥杯宝藏排序 | 数据结构 | 快速排序 归并排序
蓝桥杯宝藏排序 | 数据结构 | 快速排序 归并排序
|
2月前
|
数据可视化 搜索推荐 Python
Leecode 刷题笔记之可视化六大排序算法:冒泡、快速、归并、插入、选择、桶排序
这篇文章是关于LeetCode刷题笔记,主要介绍了六大排序算法(冒泡、快速、归并、插入、选择、桶排序)的Python实现及其可视化过程。
20 0
|
2月前
|
算法
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
34 0
|
2月前
|
搜索推荐 算法
排序算法---冒泡&选择&插入总结
排序算法---冒泡&选择&插入总结
18 0
|
2月前
|
存储 算法 搜索推荐
算法进阶之路:Python 归并排序深度剖析,让数据排序变得艺术起来!
算法进阶之路:Python 归并排序深度剖析,让数据排序变得艺术起来!
79 0
|
7月前
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
110 0
下一篇
DataWorks