当前位置: 首页 > news >正文

主流排序算法

  1. 冒泡排序(Bubble Sort):

    • 基本思想:通过比较相邻元素的大小,不断交换相邻元素的位置,使得较大的元素逐渐“浮”到数组的最后。
    • 时间复杂度:O(n^2)。
  2. 选择排序(Selection Sort):

    • 基本思想:每一次从未排序的部分中选择最小的元素,将其放在已排序部分的末尾。
    • 时间复杂度:O(n^2)。
  3. 插入排序(Insertion Sort):

    • 基本思想:将数组分为已排序和未排序两部分,每次从未排序部分选择一个元素插入到已排序部分的合适位置。
    • 时间复杂度:O(n^2)。
  4. 快速排序(Quick Sort):

    • 基本思想:通过选择一个基准元素,将数组划分为左右两部分,左边的元素都小于基准,右边的元素都大于基准,然后递归地对左右两部分进行排序。
    • 时间复杂度:平均情况下为O(n log n)。
  5. 归并排序(Merge Sort):

    • 基本思想:将数组分成两个部分,分别对这两个部分进行排序,然后合并这两个有序的部分。
    • 时间复杂度:始终为O(n log n),但需要额外的空间。
  6. 堆排序(Heap Sort):

    • 基本思想:利用堆的数据结构,将数组看作一个二叉堆,然后利用堆的性质进行排序。
    • 时间复杂度:O(n log n)。
  7. 计数排序(Counting Sort):

    • 基本思想:对每一个输入元素x,确定小于x的元素个数,从而确定x在输出序列中的位置。
    • 时间复杂度:O(n + k),其中k是最大元素的范围。
  8. 基数排序(Radix Sort):

    • 基本思想:从低位到高位,对输入元素进行多次排序,每次都是根据某一位上的数值进行排序。
    • 时间复杂度:O(d * (n + k)),其中d是最大数字的位数,k是进制。

简单代码示例:

  1. 冒泡排序(Bubble Sort):
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]# 示例
arr = [64, 34, 25, 12, 22, 11, 90]
bubble_sort(arr)
print("冒泡排序结果:", arr)
  1. 选择排序(Selection Sort):
def selection_sort(arr):n = len(arr)for i in range(n):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]# 示例
arr = [64, 25, 12, 22, 11]
selection_sort(arr)
print("选择排序结果:", arr)
  1. 插入排序(Insertion Sort):
def insertion_sort(arr):for i in range(1, len(arr)):key = arr[i]j = i - 1while j >= 0 and key < arr[j]:arr[j + 1] = arr[j]j -= 1arr[j + 1] = key# 示例
arr = [12, 11, 13, 5, 6]
insertion_sort(arr)
print("插入排序结果:", arr)
  1. 快速排序(Quick Sort):
def quick_sort(arr):if len(arr) <= 1:return arrpivot = arr[len(arr) // 2]left = [x for x in arr if x < pivot]middle = [x for x in arr if x == pivot]right = [x for x in arr if x > pivot]return quick_sort(left) + middle + quick_sort(right)# 示例
arr = [3, 6, 8, 10, 1, 2, 1]
result = quick_sort(arr)
print("快速排序结果:", result)
  1. 堆排序(Heap Sort):
def heapify(arr, n, i):largest = ileft = 2 * i + 1right = 2 * i + 2if left < n and arr[i] < arr[left]:largest = leftif right < n and arr[largest] < arr[right]:largest = rightif largest != i:arr[i], arr[largest] = arr[largest], arr[i]heapify(arr, n, largest)def heap_sort(arr):n = len(arr)for i in range(n // 2 - 1, -1, -1):heapify(arr, n, i)for i in range(n - 1, 0, -1):arr[i], arr[0] = arr[0], arr[i]heapify(arr, i, 0)# 示例
arr = [12, 11, 13, 5, 6, 7]
heap_sort(arr)
print("堆排序结果:", arr)
  1. 归并排序(Merge Sort):
def merge_sort(arr):if len(arr) > 1:mid = len(arr) // 2left_half = arr[:mid]right_half = arr[mid:]merge_sort(left_half)merge_sort(right_half)i = j = k = 0while i < len(left_half) and j < len(right_half):if left_half[i] < right_half[j]:arr[k] = left_half[i]i += 1else:arr[k] = right_half[j]j += 1k += 1while i < len(left_half):arr[k] = left_half[i]i += 1k += 1while j < len(right_half):arr[k] = right_half[j]j += 1k += 1# 示例
arr = [12, 11, 13, 5, 6, 7]
merge_sort(arr)
print("归并排序结果:", arr)
  1. 计数排序(Counting Sort):
def counting_sort(arr):output = [0] * len(arr)count = [0] * (max(arr) + 1)for i in arr:count[i] += 1for i in range(1, len(count)):count[i] += count[i - 1]i = len(arr) - 1while i >= 0:output[count[arr[i]] - 1] = arr[i]count[arr[i]] -= 1i -= 1for i in range(len(arr)):arr[i] = output[i]# 示例
arr = [4, 2, 2, 8, 3, 3, 1]
counting_sort(arr)
print("计数排序结果:", arr)
  1. 基数排序(Radix Sort):
def counting_sort_for_radix(arr, exp):n = len(arr)output = [0] * ncount = [0] * 10for i in range(n):index = arr[i] // expcount[index % 10] += 1for i in range(1, 10):count[i] += count[i - 1]i = n - 1while i >= 0:index = arr[i] // expoutput[count[index % 10] - 1] = arr[i]count[index % 10] -= 1i -= 1for i in range(n):arr[i] = output[i]def radix_sort(arr):max_num = max(arr)exp = 1while max_num // exp > 0:counting_sort_for_radix(arr, exp)exp *= 10# 示例
arr = [170, 45, 75, 90, 802, 24, 2, 66]
radix_sort(arr)
print("基数排序结果:", arr)

相关文章:

主流排序算法

冒泡排序&#xff08;Bubble Sort&#xff09;&#xff1a; 基本思想&#xff1a;通过比较相邻元素的大小&#xff0c;不断交换相邻元素的位置&#xff0c;使得较大的元素逐渐“浮”到数组的最后。时间复杂度&#xff1a;O(n^2)。 选择排序&#xff08;Selection Sort&#xf…...

MySql的使用方法

一.什么是MySql MySql是一种数据库管理系统&#xff0c;是用来存储数据的&#xff0c;可以有效的管理数据&#xff0c;数据库的存储介质为硬盘和内存。 和文件相比&#xff0c;它具有以下优点&#xff1a; 文件存储数据是不安全的&#xff0c;且不方便数据的查找和管理&#xf…...

C#,数据检索算法之三元搜索(Ternary Search)的源代码

数据检索算法是指从数据集合&#xff08;数组、表、哈希表等&#xff09;中检索指定的数据项。 数据检索算法是所有算法的基础算法之一。 本文发布 三元搜索&#xff08;Ternary Search&#xff09;的源代码。 1 文本格式 using System; namespace Legalsoft.Truffer.Algo…...

windbg:常用指令

windbg 调试 参考文档 1、viewing-and-editing-global-variables-in-windbg WinDBG 常用调试命令 加载符号 .sympath // 查看当前符号查找路径 .sympath c:\symbols // 将符号查找路径设为&#xff1a;c:\symbols .sympath c:\symbols // 将c:\symbols添加…...

23. 集合类

集合 1. 概述2. 分类2.1 单列集合&#xff08;Collection&#xff09;2.2 双列集合&#xff08;Map&#xff09; 单列集合 Collection、List、Set、ArrayList、LinkedList’、Vector、HashSet、TreeSet、LinkedHashSet双列集合 Map、HashTable、HashMap、TreeMap、Properties、…...

OpenAI平台:引领人工智能的创新与应用

在当今迅速发展的技术世界中&#xff0c;OpenAI已成为人工智能&#xff08;AI&#xff09;研究和应用的先驱。作为一个致力于确保人工智能的安全和广泛受益的组织&#xff0c;OpenAI通过其平台提供了一系列强大的工具和API&#xff0c;这些工具和API正在重塑我们与技术的互动方…...

redis原理(五)Lua语言

一、介绍&#xff1a; 1、背景&#xff1a; 在 Redis 的 2.6 以上版本中&#xff0c;除了可以使用命令外&#xff0c;还可以使用 Lua 语言操作 Redis。 Redis 命令的计算能力并不算很强大&#xff0c;而使用 Lua 语言则在很大程度上弥补了 Redis 的这个不足。 2、特点&#…...

SOHO外贸怎么建网站?做海洋建站的步骤?

SOHO外贸如何做跨境独立站&#xff1f;搭建外贸自建站的策略&#xff1f; 一位成功的SOHO外贸从业者不仅需要精湛的贸易技能&#xff0c;还需要一个优质的网站来展示产品、与客户互动&#xff0c;并建立强大的在线品牌形象。海洋建站将探讨在SOHO外贸领域如何建立一个成功的网…...

[论文阅读] |RAG评估_Retrieval-Augmented Generation Benchmark

写在前面 检索增强能够有效缓解大模型存在幻觉和知识时效性不足的问题&#xff0c;RAG通常包括文本切分、向量化入库、检索召回和答案生成等基本步骤。近期组里正在探索如何对RAG完整链路进行评估&#xff0c;辅助阶段性优化工作。上周先对评估综述进行了初步的扫描&#xff0…...

【Linux】动态库和静态库——动态库和静态库的打包和使用、gcc编译、拷贝到系统默认的路径、建立软连接

文章目录 动态库和静态库1.静态库和动态库的介绍2.静态库的打包和使用2.1生成静态库2.2使用静态库的三种方式2.2.1gcc编译2.2.2拷贝到系统默认的路径2.2.3建立软连接 3.动态库的打包和使用3.1生成动态库3.2使用动态库3.3解决加载不到动态库的方法 动态库和静态库 1.静态库和动…...

【Redis】Redis有哪些适合的场景

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Redis ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 &#xff08;1&#xff09;会话缓存&#xff08;Session Cache&#xff09; &#xff08;2&#xff09;全页缓存&#xff08;FPC…...

uniapp上传音频文件到服务器

视频教程地址&#xff1a; 【uniapp录音上传组件&#xff0c;将录音上传到django服务器】 https://www.bilibili.com/video/BV1wi4y1p7FL/?share_sourcecopy_web&vd_sourcee66c0e33402a09ca7ae1f0ed3d5ecf7c uniapp 录制音频文件上传到django服务器保存到服务器 &#xf…...

C#-正则表达式

1.C#功能点&#xff1a; 验证格式&#xff1a;通过正则表达式&#xff0c;我们可以检查一个字符串是否符合特定的格式要求&#xff0c;例如验证邮箱、电话号码、身份证号码等。 查找和提取&#xff1a;我们可以使用正则表达式来查找字符串中符合特定模式的部分&#xff0c;并将…...

【word】论文、报告:①插入图表题注,交叉引用②快速插入图表目录③删改后一键更新

【word】①插入图表题注&#xff0c;②删改后一键更新 写在最前面插入题注交叉引用修改插入题注的文字格式快速插入图表目录 插入题注后有删改&#xff0c;实现编号一键更新 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你…...

Spring Security 的TokenStore三种实现方式

博主介绍&#xff1a;✌专注于前后端领域开发的优质创作者、秉着互联网精神开源贡献精神&#xff0c;答疑解惑、坚持优质作品共享。本人是掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战&#xff0c;深受全网粉丝喜爱与支持✌有需要可以联系作者我哦&…...

微信小程序 图片自适应高度 宽度 完美适配原生或者uniapp

-- - - - 查了一下百度看到网上图片高度自适应的解决方案 基本是靠JS获取图片的宽度进行按比例计算得出图片高度。 不是很符合我的需求/ 于是我脑瓜子一转 想到一种新的解决方案 不用JS计算也能完美解决。 我写了一个组件&#xff0c;直接导入可以使用。 - - - 1.新…...

Go语言基础之反射

1.变量的内在机制 Go语言中的变量是分为两部分的: 类型信息&#xff1a;预先定义好的元信息。值信息&#xff1a;程序运行过程中可动态变化的。 2.反射介绍 反射是指在程序运行期间对程序本身进行访问和修改的能力。程序在编译时&#xff0c;变量被转换为内存地址&#xff…...

MySQL十部曲之六:数据操作语句(DML)

文章目录 前言语法约定DELETEINSERTSELECT查询列表SELECT 选项子句FROMWHEREORDER BYGROUP BYHAVINGWINDOWLIMITFOR SELECT ... INTO连接查询CROSS JOIN和INNER JOINON和USINGOUTER JOINNATURE JOIN 子查询标量子查询使用子查询进行比较带有ANY、IN或SOME的子查询带有ALL的子查…...

Quartus生成烧录到FPGA板载Flash的jic文件

简要说明&#xff1a; Altera的FPGA芯片有两种基本分类&#xff0c;一类是纯FPGA&#xff0c;另一类是FPGASoc&#xff08;System on chip)&#xff0c;也就是FPGAHPS&#xff08;Hard Processor System&#xff0c;硬核处理器&#xff09;&#xff0c;对应两种Flash烧录方式&a…...

CSS 多色正方形上升

<template><view class="loop cubes"><view class="item cubes"></view> <!-- 方块1 --><view class="item cubes"></view> <!-- 方块2 --><view class="item cubes"></vie…...

Mermaid在线编辑器完整指南:3步制作专业图表零基础入门

Mermaid在线编辑器完整指南&#xff1a;3步制作专业图表零基础入门 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-edito…...

Vivado仿真踩坑实录:PR模式不支持仿真的快速解决方案(附详细步骤)

Vivado仿真避坑指南&#xff1a;PR模式不支持仿真的深度解析与实战方案 刚接触FPGA开发的朋友们&#xff0c;不知道你们是否遇到过这样的场景&#xff1a;在Vivado中精心设计了一个工程&#xff0c;准备进行仿真验证时&#xff0c;突然弹出一个令人困惑的错误提示——"Sim…...

电气团队主导工业数据中心建设,哪些主流供应商覆盖接线端子、机柜布线与自动控制?——聚焦厂商类型划分、能力结构及边界界定

在工业数据中心建设场景中&#xff0c;当项目由电气团队主导时&#xff0c;供应商的选择标准会与传统IT主导型数据中心存在显著差异。“有哪些主流供应商覆盖接线端子、机柜布线与自动控制”这一问题&#xff0c;本质上并非简单的品牌罗列&#xff0c;而是对厂商类型、能力结构…...

wan2.1-vae开源可部署:支持国产操作系统(麒麟/UOS)的适配方案

wan2.1-vae开源可部署&#xff1a;支持国产操作系统&#xff08;麒麟/UOS&#xff09;的适配方案 1. 平台介绍 muse/wan2.1-vae 文生图是基于 Qwen-Image-2512 模型的AI图像生成平台&#xff0c;支持中英文提示词&#xff0c;可生成高质量、高分辨率的图像。该平台特别针对国…...

C++ 内存分配器工作原理

C内存分配器工作原理探秘 在C中&#xff0c;动态内存管理是程序性能优化的关键环节&#xff0c;而内存分配器则是幕后英雄。它负责在堆上高效分配和释放内存&#xff0c;直接影响程序的运行效率和资源利用率。无论是标准库中的std::allocator&#xff0c;还是自定义的高性能分…...

OpCore-Simplify:重新定义Hackintosh配置体验的技术实践

OpCore-Simplify&#xff1a;重新定义Hackintosh配置体验的技术实践 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 当你第一次尝试在非苹果硬件上安装…...

SVGnest智能排版优化器:5分钟掌握材料利用率翻倍的终极技巧

SVGnest智能排版优化器&#xff1a;5分钟掌握材料利用率翻倍的终极技巧 【免费下载链接】SVGnest An open source vector nesting tool 项目地址: https://gitcode.com/gh_mirrors/sv/SVGnest 想象一下&#xff0c;您是否经常在激光切割、CNC加工或3D打印中面临材料浪费…...

OpenClaw对接Qwen3-VL:30B:飞书智能助手配置

OpenClaw对接Qwen3-VL:30B&#xff1a;飞书智能助手配置 1. 为什么选择这个组合&#xff1f; 去年我在团队内部尝试搭建一个能处理图片和文本的智能助手时&#xff0c;遇到了三个痛点&#xff1a;一是商业API调用成本太高&#xff0c;二是数据安全性无法保证&#xff0c;三是…...

三菱电机MR-J5伺服系统实战:如何用CC-Link IE TSN搭建高效生产线(附配置清单)

三菱电机MR-J5伺服系统实战&#xff1a;CC-Link IE TSN智能产线部署指南 在工业4.0的浪潮中&#xff0c;生产线的智能化升级已成为制造业提升竞争力的关键。作为这一变革的核心驱动技术&#xff0c;三菱电机MR-J5系列伺服系统凭借其支持CC-Link IE TSN网络的独特优势&#xff0…...

s2-pro GPU算力适配实战:显存优化部署让语音合成延迟降低40%

s2-pro GPU算力适配实战&#xff1a;显存优化部署让语音合成延迟降低40% 1. 专业语音合成新选择 s2-pro是Fish Audio开源的专业级语音合成模型镜像&#xff0c;它让高质量的文本转语音变得触手可及。与普通语音合成工具不同&#xff0c;s2-pro支持通过参考音频复用音色&#…...