蓝桥杯-Python组(一)

1. 冒泡排序

算法步骤:

  • 比较相邻元素,如果第一个大于第二个则交换
  • 从左往右遍历一遍,重复第一步,可以保证最大的元素在最后面
  • 重复上述操作,可以得到第二大、第三大、…
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
n = int(input())
a = list(map(int, input().split()))

# 循环n-1次,每次获得第i大
for i in range(1, n):
    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. 选择排序

算法步骤:

  • 从左往右找到最小元素,放在起始位置
  • 重复上述步骤,依次找到第2小、第3小元素…
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

n = int(input())
a = list(map(int, input().split()))  # 将一个函数映射到一个或多个迭代器中的所有元素上

for i in range(n - 1):
    min_value = a[i]  # 值
    min_idx = i  # 下标
    for j in range(i, n):
        # 第i次从[i, n-1]找最小值
        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)))

3. 插入排序

算法步骤:

  • 第一个元素看做已排序,从左往右遍历每一个元素;
  • 在已排序元素中从后往前扫描:如果当前元素大于新元素,则该元素移动到后一位
  • 重复第二步直至找到小于等于新元素则停止
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
n = int(input())
a = list(map(int, input().split()))

# 对于第i个数字,在区间[0,i-1]中从后往前找对应插入的位置
for i in range(1, n):
    value = a[i]
    # 插入元素的下标
    insert_idx = 0
    for j in range(i - 1, -1, -1):
        if a[j] > value:
            # 往后挪
            a[j + 1] = a[j]
        else:
            insert_idx = j + 1
            break
    # 插入第i个数字
    a[insert_idx] = value
print(' '.join(map(str, a)))

4. 快速排序

算法步骤:

  • 找一个基准值X
  • 把列分成三部分:小于等于X的数字,X, 大于X的数字
  • 左半部分和右半部分递归使用该策略

例如:a=[3,5,8,1,2,9,4,7,6]
找到基准值3,[1,2] , 3, [5,8,9,4,7,6]
左半部分[1,2]作为一个子问题求解
右半部分 [5,8,9,4,7,6]作为一个子问题求解
在这里插入图片描述
在这里插入图片描述

# a[left,right]按照小于等于基准值、基准值、大于基准值排列
def partition(a, left, right):
    # 设置基准值下标:left
    # 放置小于等于基准之元素的下标
    idx = left + 1
    for i in range(left + 1, right + 1):
        # 如果当前元素小于等于基准值,则放到最小元素那边
        if a[i] <= a[left]:
            a[idx], a[i] = a[i], a[idx]
            idx += 1

    # 小于等于基准值的元素为[left+1, idx-1]
    # 最后将基准值放在中间
    a[left], a[idx - 1] = a[idx - 1], a[left]

    # 返回基准值的下标
    return idx - 1


def quicksort(a, left, right):
    if left < right:
        mid = partition(a, left, right)
        quicksort(a, left, mid - 1)
        quicksort(a, mid + 1, right)


n = int(input())
a = list(map(int, input().split()))
quicksort(a, 0, n-1)
print(' '.join(map(str, a)))

5. 归并排序

算法步骤:

  • 先把数组分成两部分
  • 每部分递归处理变成有序
  • 将两个有序列表合并起来

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

n = int(input())
a = list(map(int, input().split()))


# 合并两个List
def Merge(A, B):
    result = []
    while len(A) != 0 and len(B) != 0:
        if A[0] <= B[0]:
            result.append(A.pop(0))
        else:
            result.append(B.pop(0))
    result.extend(A)
    result.extend(B)
    return result


def MergeSort(A):
    if len(A) < 2:
        return A
    mid = len(A) // 2
    left = MergeSort(A[:mid])
    right = MergeSort(A[mid:])
    return Merge(left, right)


print(' '.join(map(str, MergeSort(a))))

6. 桶排序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

from itertools import chain


def Bucket_Sort(a, bucketcount):
    minvalue, maxvalue = min(a), max(a)
    # 桶大小
    bucketsize = (maxvalue - minvalue + 1) // bucketcount
    res = [[] for i in range(bucketcount + 1)]
    for x in a:
        idx = (x - minvalue) // bucketsize
        res[idx].append(x)

    # print(res)
    # 每个桶单独排序,可以采用其他排序算法
    for res_x in res:
        res_x.sort()
    return list(chain(*res))


n = int(input())
a = list(map(int, input().split()))

a = Bucket_Sort(a, min(n, 10000))
print(' '.join(map(str, a)))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/467195.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java实现kml文件下载接口

根据业务需求&#xff0c;需提供一个下载kml格式航线文件的HTTP GET接口 示例代码 RequestMapping(value "/getFlyingPathFile/{uavTypeId}/{flyingPathId}.kml", method RequestMethod.GET, produces "application/vnd.google-earth.kmlxml") Respons…

轻松打造完美原型:9款在线工具推荐

早年&#xff0c;UI设计师选择的工具有限&#xff0c;功能相对单一&#xff0c;大多数在线原型设计工具都是国外的&#xff0c;语言和网络都增加了设计工作的负担。如今&#xff0c;国内外有许多在线原型设计工具&#xff0c;不仅可以在浏览器上使用&#xff0c;而且还具有团队…

wsl or 虚拟机 安装

1.wsl2安装 WSL全称Windows Subsystem for Linux&#xff0c;是微软开发的适用于Linux的Windows子系统 如今已经有两代了&#xff1a; 所以用的多的还是wsl2。 安装前需要先去设置启用或关闭Windows功能&#xff1a; 打开适用于linux的子系统和虚拟机平台。 Microsoft Store里…

论文阅读——MoCo

Momentum Contrast for Unsupervised Visual Representation Learning 动量在数学上理解为加权移动平均&#xff1a; yt-1是上一时刻输出&#xff0c;xt是当前时刻输入&#xff0c;m是动量&#xff0c;不想让当前时刻输出只依赖于当前时刻的输入&#xff0c;m很大时&#xff0…

小程序搜索排名优化二三事

小程序的优化主要是排名优化和性能优化两个版块。性能优化这方面主要靠开发者自己完善&#xff0c;我们团队提供的服务就是把产品的排名打上去&#xff0c;获得更多的自然流量&#xff0c;实现盈利。 如何提升小程序的搜索排名主要从如下几个方面出发&#xff1a; 首先要知道…

二蛋赠书十八期:《一本书讲透Elasticsearch:原理、进阶与工程实践》

Elasticsearch 是一种强大的搜索和分析引擎&#xff0c;被广泛用于各种应用中&#xff0c;以其强大的全文搜索能力而著称。 不过&#xff0c;在日常管理 Elasticsearch 时&#xff0c;我们经常需要对索引进行保护&#xff0c;以防止数据被意外修改或删除&#xff0c;特别是在进…

【数据结构与算法】:非递归实现快速排序、归并排序

&#x1f525;个人主页&#xff1a; Quitecoder &#x1f525;专栏&#xff1a;数据结构与算法 上篇文章我们详细讲解了递归版本的快速排序&#xff0c;本篇我们来探究非递归实现快速排序和归并排序 目录 1.非递归实现快速排序1.1 提取单趟排序1.2 用栈实现的具体思路1.3 代码…

PHP反序列化---字符串逃逸(增加/减少)

一、PHP反序列化逃逸--增加&#xff1a; 首先分析源码&#xff1a; <?php highlight_file(__FILE__); error_reporting(0); class A{public $v1 ls;public $v2 123;public function __construct($arga,$argc){$this->v1 $arga;$this->v2 $argc;} } $a $_GET[v…

计算机组成原理-2-计算机的发展应用

2. 计算机的发展应用 文章目录 2. 计算机的发展应用2.1 计算机的发展史2.1.1 计算机的产生和发展2.1.2 微型计算机的出现和发展2.1.3 软件技术的发展和兴起 2.2 计算机的应用和展望 本笔记参考哈工大刘宏伟老师的MOOC《计算机组成原理&#xff08;上&#xff09;_哈尔滨工业大学…

sqllab第二十四关通关笔记

知识点&#xff1a; 二次注入 先埋一个炸弹&#xff0c;然后通过其他路径引爆它 查看界面发现是一个登录框&#xff0c;尝试进行登录框的注入发现这里不存在注入点 那么就注册一个新的账户吧 通过点击注册&#xff0c;进入注册面板&#xff0c;注册一个新的账户 用户名为 re…

react native 实现自定义底部导航与路由文件配置

首先先把需要的一些库引入 yarn install react-navigation/native yarn install react-native-screens react-native-safe-area-context yarn install react-navigation/native-stack yarn add react-navigation/bottom-tabs 创建路由文件及四个底部导航页面 router文件下的bot…

车载电子电器架构 - 网络拓扑

车载电子电器架构 - 网络拓扑 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师 (Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,喝完再挣扎,出门靠…

SpringBoot ApplicationListener实现发布订阅模式

文章目录 前言一、Spring对JDK的扩展二、快速实现发布订阅模式 前言 发布订阅模式(Publish-Subscribe Pattern)通常又称观察者模式&#xff0c;它被广泛应用于事件驱动架构中。即一个事件的发布&#xff0c;该行为会通过同步或者异步的方式告知给订阅该事件的订阅者。JDK中提供…

数据结构中单向链表(无头)的学习

一.数据结构 1.定义 一组用来保存一种或者多种特定关系的数据的集合&#xff08;组织和存储数据&#xff09; 程序的设计&#xff1a;将现实中大量而复杂的问题以特定的数据类型和特定的存储结构存储在内存中&#xff0c; 并在此基础上实现某个特定的功能的操…

Games101-光栅化(三角形 )

视锥 fov:可视角 aspect ratio&#xff1a;宽高比 MVP 屏幕&#xff1a;抽象的认为是一个二维数组&#xff0c;数组中的每一个元素是一个像素 屏幕是一个典型的光栅成像设备 光栅化&#xff1a;把东西画在屏幕上的过程 像素&#xff1a;理解为不变的最小单位&#xff0c;RGB的…

SSA优化最近邻分类预测(matlab代码)

SSA-最近邻分类预测matlab代码 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种新型的群智能优化算法&#xff0c;在2020年提出&#xff0c;主要是受麻雀的觅食行为和反捕食行为的启发。 数据为Excel分类数据集数据。 数据集划分为训练集、验证集、测试集,比例为8&#…

Android14之HIDL报错:Invalid sparse file format at header magic(一百九十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

利用自定义 URI Scheme 在 Android 应用中实现安全加密解密功能

在现代移动应用开发中&#xff0c;安全性和用户体验是至关重要的考虑因素。在 Android 平台上&#xff0c;开发人员可以利用自定义 URI Scheme 和 JavaScript 加密解密技术来实现更安全的数据传输和处理。本文将介绍如何在 Android 应用中注册自定义 URI Scheme&#xff0c;并结…

苍穹外卖-day06:HttpClient、微信小程序开发、微信登录(业务流程)、导入商品浏览功能代码(业务逻辑)

苍穹外卖-day06 课程内容 HttpClient微信小程序开发微信登录导入商品浏览功能代码 功能实现&#xff1a;微信登录、商品浏览 微信登录效果图&#xff1a; 商品浏览效果图&#xff1a; 1. HttpClient 1.1 介绍 HttpClient 是Apache Jakarta Common 下的子项目&#xff0c;…

Redis中的String编码转换底层原理及6.0新特性

String编码转换底层原理 String对象为什么把大于39字节或者44字节的字符串编码为raw&#xff0c;小于的时候编码为embstr? 在Redis3.2以前的版本中,SDS作为字符串类型中存储字符串内容的结构&#xff0c;源码如下&#xff1a; 3.2版本SDS结构 struct sdshdr {// 记录buf数…