排序算法解析

news2024/12/26 22:55:29

在这里插入图片描述

常见的排序算法包括以下几种:

  1. 冒泡排序(Bubble Sort):重复比较相邻的两个元素,将较大的元素逐渐向后移动,直到整个序列有序。

  2. 选择排序(Selection Sort):从未排序部分选择最小的元素,并将其放到已排序部分的末尾,直到整个序列有序。

  3. 插入排序(Insertion Sort):将未排序的元素逐个插入到已排序部分的正确位置,直到整个序列有序。

  4. 快速排序(Quick Sort):通过选取一个基准元素,将序列划分为左右两部分,使得所有左侧元素小于等于基准元素,所有右侧元素大于等于基准元素,然后对左右两部分递归地进行快速排序,直到整个序列有序。

  5. 归并排序(Merge Sort):将序列不断二分为子序列,对子序列进行排序,再将排好序的子序列合并,直到整个序列有序。

  6. 堆排序(Heap Sort):利用堆数据结构实现的一种排序算法。通过构建最大堆或最小堆,在每一次迭代中将堆顶元素与末尾元素交换,并重新调整堆,直到整个序列有序。

  7. 希尔排序(Shell Sort):将整个序列分成若干个子序列,对子序列进行插入排序,然后逐步缩小子序列的间隔,直到间隔为1,再对整个序列进行一次插入排序。

  8. 计数排序(Counting Sort):根据待排序序列中元素的大小,在额外开辟的空间中统计每个元素出现的次数,然后根据统计信息对元素进行排序。

  9. 桶排序(Bucket Sort):将待排序序列划分为若干个桶,并对每个桶进行排序,最后依次取出各个桶中的元素得到有序序列。

  10. 基数排序(Radix Sort):按照元素的位数进行排序,从低位到高位依次比较。

这些排序算法各有优劣和适用场景,选择合适的排序算法取决于待排序数据的规模、性质以及对稳定性、时间复杂度和空间复杂度的要求。

下面是常见排序算法的python代码示例:

冒泡排序:

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n - i - 1):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr

选择排序:

def selection_sort(arr):
    n = len(arr)
    for i in range(n - 1):
        min_index = i
        for j in range(i + 1, n):
            if arr[j] < arr[min_index]:
                min_index = j
        arr[i], arr[min_index] = arr[min_index], arr[i]
    
    return arr

插入排序:

def insertion_sort(arr):
    n = len(arr)
    for i in range(1, n):
        key = arr[i]
      
        j = i - 1
        while j >= 0 and arr[j] > key:
            arr[j + 1] = arr[j]
            j -= 1
        arr[j + 1] = key
    
    return arr

快速排序:

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    
    pivot = arr[0]
    left = [x for x in arr[1:] if x < pivot]
    right = [x for x in arr[1:] if x >= pivot]
    
    return quick_sort(left) + [pivot] + quick_sort(right)

归并排序:

def merge_sort(arr):
    if len(arr) <= 1:
        return arr
    
    mid = len(arr) // 2
    left = merge_sort(arr[:mid])
    right = merge_sort(arr[mid:])
    
    return merge(left, right)

堆栈排序:

def shell_sort(arr):
    n = len(arr)
    gap = n // 2
    while gap > 0:
        for i in range(gap):
            temp = arr[i]
            j = i
            while j >= gap and temp < arr[j - gap]:
                arr[j] = arr[j - gap]
                j -= gap
            arr[j] = temp
        gap //= 2
    return arr

计数排序:

def counting_sort(arr):
    counts = [0] * 100
    for num in arr:
        counts[num] += 1
    
    for i in range(101):
        counts[i] += counts[i - 1]
    
    for i in range(n):
        arr[i] = counts[arr[i]]

桶排序:

def bucket_sort(arr):
    buckets = [0] * 100
    for num in arr:
        bucket = num // 10
        buckets[bucket] += 1
    
    for i in range(100):
        buckets[i] += buckets[i - 1]
    
    for i in range(n):
        arr[i] = buckets[arr[i] // 10]

基数排序:

def radix_sort(arr):
    max_digit = max(arr)
    base = 10
    
    while max_digit > 0:
        bucket = []
        for digit in range(1, max_digit+1):
            if arr[digit-1] == digit:
                bucket.append(digit)
        
        for digit in bucket:
            arr[digit-1] = base * arr[digit-1]
        
        base *= 10
        max_digit //= 10
    
    return arr

以上是常见的排序算法的Python代码示例,其中冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序、计数排序、桶排序、基数排序是常见的排序算法。其中,冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序、计数排序、桶排序、基数排序都是基于比较和交换的基本思想实现的。而堆排序、希尔排序、计数排序、桶排序、基数排序则是基于不同的数据结构实现的。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx负载均衡、虚拟主机

目录 常用的6种负载均衡算法 轮询算法(round robin)默认 权重(weight) 响应时间(fair) 连接数(least_conn) IP_hash url_hash(第三方) 开发优选&#xff1a;一致性哈希 安装步骤&#xff1a; 虚拟主机 常用的6种负载均衡算法 轮询算法(round robin)默认 轮询方式&a…

MMaction2 使用记录1——训练及测试

目录 训练及测试 Training 在你的 PC上训练 Training 多 GPUs Test 训练及测试 Training 在你的 PC上训练 你可以使用tools/train.py在一台有CPU和可选GPU的机器上训练一个模型。 下面是该脚本的完整用法&#xff1a; python tools/train.py ${CONFIG_FILE} [ARGS] 默…

基于Java出租车管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

2023RPA最佳实践案例之:实在智能助力杭州银行打造数字员工智能辅助平台

导语&#xff1a; 近期&#xff0c;实在智能荣登"2023爱分析RPA最佳实践案例"榜单。此次评选活动旨在表彰在RPA领域具备实践领先性、案例创新性、应用成熟度、价值创造等优点的企业和厂商&#xff0c;实在智能以其为杭州银行打造的RPA数字员工解决方案作为目前 RPA …

一天吃透操作系统面试八股文

内容摘自我的学习网站&#xff1a;topjavaer.cn 操作系统的四个特性&#xff1f; 并发&#xff1a;同一段时间内多个程序执行&#xff08;与并行区分&#xff0c;并行指的是同一时刻有多个事件&#xff0c;多处理器系统可以使程序并行执行&#xff09; 共享&#xff1a;系统中…

回归预测 | MATLAB实现PSO-DNN粒子群算法优化深度神经网络的数据多输入单输出回归预测

回归预测 | MATLAB实现PSO-DNN粒子群算法优化深度神经网络的数据多输入单输出回归预测 目录 回归预测 | MATLAB实现PSO-DNN粒子群算法优化深度神经网络的数据多输入单输出回归预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 回归预测 | MATLAB实现PSO-DNN粒子…

一文教你搞懂性能测试常见指标

目录 1. 性能指标分类 2. 系统性能指标 2.1 响应时间 2.2 系统处理能力 2.3 吞吐量 2.4 并发用户数 2.5 错误率 3. 资源性能指标 3.1 CPU 3.2 内存 3.3 磁盘吐吞量 3.4 网络吐吞量 4. 中间件指标 5. 数据库指标 6. 稳定性指标 7. 可扩展性指标 8. 可靠性…

谷歌浏览器Crx插件库-https://crxdl.com/

地址&#xff1a;https://crxdl.com/ postman插件&#xff1a;talend json插件库&#xff1a;csdn插件 抓取视频&#xff1a;猫抓

C++primer(第五版)第十章(泛型算法)

10.1概述 大多数算法定义在头文件algorithm中.另外头文件numeric中定义了一组数值泛型算法. 一般情况下算法不直接操作容器,而是通过迭代器来对元素进行处理,因此迭代器令算法不依赖容器,但算法依赖于元素类型的操作. 泛型算法本身不会执行容器的操作,它们只会运行于迭代器之…

XD教程笔记

一、快捷键 选择&#xff1a; V 粘贴外观&#xff1a; ctrl alt V 矩形&#xff1a; R 组件&#xff1a; ctrl K 椭圆&#xff1a; E 向某一方向对齐&#xff1a; ctrl shift 方向键 钢笔&#xff1a; P 100%显示&#xff1a; ctrl 1 文本&#xff1a; T 锁定&a…

SAP ABAP 查表数据接口

查 SAP 表数据的接口 1.使用范例&#xff1a; 字段注释QUERY_TABLE查询的表名FIELDNAME查询的字段ROWCOUNT查询的行数ROWCOUNT查询的行数OPTIONS查询条件FIELDS查询字段的释义和字符长度DATA查询的数据TOTALROWS符合条件数据的行数 FIELDS 结果&#xff1a; 外围系统接口调用…

图像像素操作与二值化

目录 1、图像像素比较 1.1 比较函数 1.2 图像最大值最小值寻找 2、图像像素逻辑操作 3、图像二值化 3.1 固定阈值二值化 3.2 自适应阈值二值化 1、图像像素比较 1.1 比较函数 1.2 图像最大值最小值寻找 Mat img imread("F:/testMap/bijiao.png");Mat white i…

Bootstrap - 【echart】 统计图表基本使用

一. 前言 Bootstrap是一个流行的前端框架&#xff0c;而ECharts是一个流行的可视化库。 Bootstrap可以用来设计网站和应用程序的用户界面&#xff0c;而ECharts可以用来创建交互式和可视化的图表。 chart.js中文文档&#xff1a;http://www.bootcss.com/p/chart.js/docs/ 二.…

MYSQL的基础架构

了解MySQL&#xff08;超详细的MySQL工作原理 体系结构&#xff09; 1.MySQL体系结构 2.MySQL内存结构 3.MySQL文件结构 4.innodb体系结构 一、了解MySQL前你需要知道的 引擎是什么: MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同…

现货白银投资技巧实战教程

交易的实战技巧是指一些能让交易者获利的方法&#xff0c;当中一般都包含重要的操作纪律以及资金的配置策略&#xff0c;目标是要让投资者以合理的风险控制&#xff0c;来赢得持续的利润。现货白银投资技巧实战教程主要有以下几方面的内容&#xff1a; 1、充分了解交易细则。交…

腾讯云服务器新手入门_省钱入口_搭建网站全流程

腾讯云服务器新手指南从云服务器创建、远程连接到云服务器、安装操作系统、使用阿里云服务器建站教程等全流程&#xff0c;腾讯云服务器网分享腾讯云服务器从创建、使用到搭建网站全流程指南&#xff1a; 目录 一&#xff1a;腾讯云服务器创建 二&#xff1a;腾讯云服务器远…

leetcode84. 柱状图中最大的矩形(单调栈-java)

柱状图中最大的矩形 leetcode84. 柱状图中最大的矩形题目描述单调栈加数组优化栈结构解题代码演示用数组来优化栈结构,时间会更快 单调栈专题 leetcode84. 柱状图中最大的矩形 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/prob…

01、Linux运维发展与学习路线图

目录 一、Linux运维行业前景二、运维相关岗位三、Linux运维岗位薪酬四、Linux运维岗知识框架4.1、常见站点系统架构演变1 单机2 多机3 缓存4 向外扩展5 Docker 4.2 知识体系框架图4.3 技术人员成长的阶段4.4 方法论 一、Linux运维行业前景 流程化、标准化的工作越来越依赖于信…

结构光三维测量几种比较成熟的方法

1.飞行时间发 原理:通过直接测量光传播的时间,确定物体的面型。发射脉冲信号,接受发射回的光,计算距离。 精度:毫米级 优点:原理简单,可避免阴影和遮挡等问题,且仪器便携化。 缺点:精度相对较低 2.莫尔条纹法 原理:采用两组光栅,一个主光栅,一个基准光栅,通过…

vue + element 笔记

1.安装nodejs&#xff0c;cmd中运行 node -v 验证是否成功 2.安装cnpm&#xff0c;cmd中运行 npm install -g cnpm --registryhttps://registry.npm.taobao.org&#xff0c;cmd中 cnpm -v 验证是否成功 3.安装vue-cli&#xff0c;cmd中运行 cnpm install --global vue-cli&…