排序算法解析

在这里插入图片描述

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

  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 = ifor j in range(i + 1, n):if arr[j] < arr[min_index]:min_index = jarr[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 - 1while j >= 0 and arr[j] > key:arr[j + 1] = arr[j]j -= 1arr[j + 1] = keyreturn arr

快速排序:

def quick_sort(arr):if len(arr) <= 1:return arrpivot = 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 arrmid = len(arr) // 2left = merge_sort(arr[:mid])right = merge_sort(arr[mid:])return merge(left, right)

堆栈排序:

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

计数排序:

def counting_sort(arr):counts = [0] * 100for num in arr:counts[num] += 1for 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] * 100for num in arr:bucket = num // 10buckets[bucket] += 1for 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 = 10while 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 *= 10max_digit //= 10return arr

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java面试题(24)

1、重写equals&#xff08;&#xff09;方法的原则 1、对称性&#xff1a; 如果x.equals&#xff08;y&#xff09;返回是“true”&#xff0c;那么y.equals&#xff08;x&#xff09;也应该返回是 “true”。 2、自反性&#xff1a; x.equals&#xff08;x&#xff09;必须…

mysql 数据库备份和还原

数据库备份 第一步&#xff1a;先在环境变量Path里面加上mysql bin目录的路径 第二部&#xff1a;执行对应的命令 备份数据库中的表&#xff1a; 命令&#xff1a; mysqldump -u root -p fenku_lianxi customer > d:\temp.sql root是 账号 username fenku_lianxi是数据…

transforms机制与数据标准化

文章和代码已经归档至【Github仓库&#xff1a;https://github.com/timerring/dive-into-AI 】或者公众号【AIShareLab】回复 pytorch教程 也可获取。 文章目录 图像预处理 transformstransforms运行机制数据标准化transforms.normalizetransforms.Normalize 图像预处理 transf…

javassist 02 implement interface

创建 interface package com.wsd;public interface AccountDao {int delete(); }利用 javassist 生产一个 类A, Class A implements AccountDao package com.wsd;import javassist.ClassPool; import javassist.CtClass; import javassist.CtMethod; import javassist.Modifi…

4. PS切图

4.1常见的图片格式 jpg图像格式: JPEG ( .JPG )对色彩的信息保留较好,高清,颜色较多,我们产品类的图片经常用jpg格式的gif图像格式 : GIF格式最多只能储存256色,所以通常用来显示简单图形及字体,但是可以保存透明背景和动画效果,实际经常用于一些图片小动画效果png图像格式&am…

RabbitMQ五种工作模式的简单应用

发布订阅模式(三种方式) 发布订阅模式上一篇我们已经介绍了,这里就不做介绍了,想要看的可以点此链接 在SpringBoot中对RabbitMQ三种使用方式_流殇꧂的博客-CSDN博客 Routing(路由模式)(基于注解的方式) 1.创建交换机和消息队列,类型要为direct(不设置也是默认的配置) //路由模式…

企业低成本万能架构

企业软件应用架构层出不穷&#xff08;这里的应用架构是指偏后端服务的软件架构&#xff09;每个企业由各自业务形态&#xff0c;技术栈&#xff0c;技术路线&#xff0c;技术实力不同&#xff0c;各自架构方案&#xff0c;技术选型各有各的不同&#xff0c;千姿百态&#xff0…

English Learning - L3 作业打卡 Lesson8 Day58 2023.7.3 周一

English Learning - L3 作业打卡 Lesson8 Day58 2023.7.3 周一 引言&#x1f349;句1: And this is when I learned that our borders and our obstacles can only do two things: one, stop us in our tracks or two, force us to get creative.成分划分弱读连读爆破语调 &…

颜色渐变的数据密集适用的堆叠图

一般情况会用柱状图去堆叠&#xff0c;但是如果数据量太大了&#xff0c;就可考虑这种方式堆叠。可以呈现时间和数量上不同层次数据的变化。 效果图&#xff1a; 比较详细的注释一下源码&#xff1a; import matplotlib as mpl import matplotlib.pyplot as plt import numpy …

OpenAI的新语言模型升级是否会改变人工智能领域的格局?

近年来&#xff0c;人工智能领域取得了巨大的进展&#xff0c;其中语言模型的发展尤为引人注目。而在这个领域的重要参与者之一&#xff0c;OpenAI近期宣布了其大型语言模型API的重大升级&#xff0c;引发了业界的广泛关注。随着GPT-4和gpt-3.5-turbo等新版本的推出&#xff0c…

牛客网Verilog刷题——VL39

牛客网Verilog刷题——VL39 题目答案 题目 设计一个自动贩售机&#xff0c;输入货币有两种&#xff0c;为0.5/1元&#xff0c;饮料价格是1.5/2.5元&#xff0c;要求进行找零&#xff0c;找零只会支付0.5元。 1、投入的货币会自动经过边沿检测并输出一个在时钟上升沿到1&#x…

怎样寻找SEO服务商,需要注意那些问题?

网上提供SEO服务的公司或个人多如牛毛&#xff0c;随便在搜索引擎上搜索一下&#xff0c;成千上万的公司就在眼前。大部分网站设计公司也兼职SEO服务&#xff0c;寻找合适的SEO服务商并不简单&#xff0c;鉴别合格的SEO服务商是关键。 1、确定外包任务 如果没有SEO团队&…