蓝桥杯丨简单排序

简介: 蓝桥杯丨简单排序

前言

本文主要引入算法概念,介绍简单的排序算法,主要有插入排序、选择排序以及冒泡排序

一、简单排序

1、插入排序

插入排序,顾名思义,每次在待排序序列中挑选一个,插入已有序序列中,该算法是个稳定的算法。

插入排序的过程如下:

插入排序的算法描述如下:

#插入排序
lst=list(map(int,input().split(',')))      (1)
for i in range(1,len(lst)):                (2)
   for j in range(i):                      (3)
        if lst[j]>lst[i]:                  (4)
            t=lst[i]
            lst.pop(i)
            lst.insert(j,t)
            break
lst

算法分析如下:


(1)输入一行整数,放入一个列表中,作为待排序序列


(2)第一重循环,遍历待排序序列,一个个插入到有序序列中


(3)第二重循环,遍历已排序序列(已排序序列为第一个元素到第i-1个元素),目的是找到待插入元素的位置,执行插入排序操作


(4)当待插入的位置找到后,将元素插入有序序列时不要忘记在在原序列将其删除


注:这里的有序序列与待排序序列是相对的,其实都是一个序列,相当于对序列进行原地排序


2、选择排序

选择排序,意思是每次在待排序序列中寻找一个最小值(或者最大值)放入到有序序列中,该算法是个不稳定的算法。

选择排序的过程如下:

选择排序的算法描述如下:

#选择排序
lst=list(map(int,input().split(',')))             (1)
for i in range(len(lst)):                         (2)
    minindex=i                                    (3)
    for j in range(i,len(lst)):                   
        if lst[minindex]>lst[j]:                  
            minindex=j
    lst[i],lst[minindex]=lst[minindex],lst[i]     (4)
lst

算法分析如下:

(1)输入待排序序列,放入列表中

(2)第一重循环,遍历待排序序列

(3)第二重循环,每次寻找待排序序列中的最小值,保存其下标

(4)每次将最小值放到已有序序列的最后面

3、冒泡排序

冒泡排序的意思是:从待排序序列中依次比较,如果前一个元素大于后一个元素,就交换两者的位置,冒泡排序每一趟会把待排序序列中最大或最小的元素最终位置确定下来,该算法是个稳定的算法。

冒泡排序的过程如下:

冒泡排序的算法描述如下:

#冒泡排序
lst=list(map(int,input().split(',')))           (1)
for i in range(len(lst),0,-1):                  (2)
    flag=0                                      (3)
    for j in range(i-1):
        if lst[j]>lst[j+1]:
            lst[j],lst[j+1]=lst[j+1],lst[j]
            flag=1
    if flag==0:                                 (4)
        break
lst

算没分析如下:

(1)输入一行整数,放入列表中,作为待排序序列

(2)从列表最后一个元素开始向前遍历,方便冒泡排序

(3)设置一个标志,若发生交换,则置1,未发生交换,则置0

(4)当不发生交换时,可以提前结束循环

二、问题引入

给定n个数,并按从小到大的顺序,以列表的形式输出这n个数中前m小的数

输入格式:第一行输入两个数n和m,第二行输入n个数

输出形式:输出一个列表

保证数据范围1<=m<=n<=10^6

样例输入:

4 2

6 2 5 3

分析:首先用插入排序对列表进行排序,然后用列表切割的方法获取前m个元素即可  

n,m=map(int,input().split(' '))
lst=list(map(int,input().split(' ')))
for i in range(1,len(lst)):
    for j in range(i):
        if lst[j]>lst[i]:
            t=lst[i]
            lst.pop(i)
            lst.insert(j,t)
            break
lst[0:m]

三、总结

本文主要介绍了三种最基本的排序算法,其中,选择排序是个不稳定的算法,插入排序与冒泡排序都是稳定的排序算法。

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