排序算法

wuyk5551 天前
python·算法·排序算法
21.计数排序:不用比较的“空间换时间”排序算法计数排序(Counting Sort)是一种非比较排序算法,它的核心思想是通过统计每个元素出现的次数,直接生成有序数组,不需要进行任何元素之间的比较。
Zane19941 天前
算法·排序算法
比较排序跑不出O(nlogn)是数学上证明过的,计数、桶、基数排序凭什么能绕开这堵墙「算法与数据结构」系列 Day04前三篇讲的冒泡、选择、插入、希尔、快速、归并、堆排序,不管思路差多远,有一件事是共同的:都要靠元素之间两两比较大小来确定谁排在前面。教科书里有个结论——任何基于比较的排序算法,最坏情况都跑不出O(nlogn),这不是经验总结,是能严格证明的数学下界。但计数排序、桶排序、基数排序偏偏能做到O(n)级别,比这个"下界"还快。它们到底是钻了什么空子?这篇就把这个下界怎么来的、这三种排序又是怎么绕开它的讲清楚。
虚无的纽扣1 天前
算法·排序算法
【力扣刷题】第三天:有效三角形的个数、快乐数原题202. 快乐数 - 力扣(LeetCode)。这道题的难度并不算高,重点是需要看清楚题目的描述,根据题目描述我们可以知道这个快乐数在计算过程中只会进入两种状态,一种是进入循环且进入循环的节点值不为1。第二种是某一轮计算出结果为1 。通过观察我们可以发现,这两种情况可以合并为一种情况,可以将它们都看作循环,只不过第二种的循环里只有1这个节点而已。所以我们只需要判断这个计算过程种什么时候进入循环,且进入循环时的节点为几就行了。
无忧.芙桃1 天前
c语言·c++·排序算法
数据结构之排序算法(中):冒泡排序与快速排序,从相邻交换到工程级优化从左向右比较每一对相邻元素。如果前一个元素大于后一个元素,说明这两个元素构成逆序对,就交换它们:若 a[i - 1] > a[i],交换 a[i - 1] 与 a[i]。
Zane19943 天前
算法·排序算法
归并排序和堆排序都能保证O(nlogn),为什么谁也没法把稳定和原地两个优点占全「算法与数据结构」系列 Day03上一篇讲快速排序,平均O(nlogn)听着很美,但最坏情况会退化成O(n²),还得靠随机化基准这种"打补丁"的方式去防。归并排序和堆排序不一样,不管输入长什么样,最坏情况都稳稳地卡在O(nlogn)——这才是真正意义上"靠谱"的O(nlogn)排序。但这两个"优等生"之间也不是对等的:一个要多花一倍空间才能换来稳定性,另一个能原地排却怎么都稳定不了。这篇就讲清楚这个取舍到底是怎么产生的。
虚无的纽扣4 天前
算法·leetcode·排序算法
【力扣刷题】第二天:无重复字符的最长字串、移动零问题原题3. 无重复字符的最长子串 - 力扣(LeetCode)。按照惯例,先来讲解一下我的错误思路,大家引以为鉴。
多弗朗皮卡丘4 天前
c语言·数据结构·排序算法
数据结构9:排序算法电商:按销量、评论数、价格排序。大学排名:按总分、类型、地区排序。直接插入排序是一种简单的插入排序法,其基本思想是: 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。 实际中我们玩扑克牌时,就用了插入排序的思想
无忧.芙桃4 天前
c语言·c++·排序算法
数据结构之排序算法(上):从评价指标到插入、希尔、选择与堆排序本篇目标:1.认识排序的基础概念2.学会插入排序,希尔排序。选择排序,堆排序的算法思路排序是数据结构中最基础、也最能体现“用数据特征换取效率”的主题之一。表面看,排序只是把一组数字按升序或降序排列;实际工程中,元素往往是一条完整记录,真正参与比较的只是记录中的某个关键字。
LuminousCPP4 天前
c语言·数据结构·笔记·算法·排序算法
数据结构-排序(五):计数排序与排序专题阶段总结|从外部归并到线性排序,再看算法边界与选型前面的排序专题中,我们已经从冒泡、插入、希尔排序一路学习到堆排序、快速排序和归并排序。上一篇归并排序重点研究了一个非常重要的思想:分治。递归版本不断把大区间拆成小区间,非递归版本则从 gap = 1 开始,自底向上把小的有序区间不断合并成更大的有序区间。
shehuiyuelaiyuehao5 天前
java·算法·排序算法·排序
算法46,分治快排,排序数组这段代码实现的是随机化三路快速排序,用来解决 LeetCode 912 题“排序数组”。
Zane19945 天前
算法·排序算法
冒泡、选择、插入排序都是O(n²),希尔排序凭什么说自己能更快「算法与数据结构」系列 Day01冒泡、选择、插入、希尔排序,教科书里总是打包放在一起讲,理由也差不多:都是"简单排序",都不用分治、不用额外数据结构,随手就能写出来。但如果只满足于背下"这四个都是O(n²)",会漏掉一个更有意思的问题:希尔排序明明是插入排序的改进版,为什么复杂度分析起来反而更复杂、更暧昧,甚至运气不好还能退化回O(n²)?这篇就从这四个排序的核心动作出发,把这个问题讲清楚。
ysu_03147 天前
数据结构·算法·排序算法
19-插入排序与希尔排序🎯 本篇目标:掌握插入排序和希尔排序! 📝 摘要:本文介绍两种经典的排序算法——插入排序与希尔排序。插入排序通过将新元素插入到已排序序列的正确位置完成排序,思想类似打扑克牌;希尔排序则是插入排序的改进版,通过分组、逐步缩小间隔的方式提升效率。文章包含两种算法的 C 语言实现、思想讲解及复杂度对比,适合初学者快速掌握。
个 人 练 习 生7 天前
c语言·数据结构·经验分享·学习·算法·排序算法
数据结构:排序算法详解排序就是把一组数据按某种规则(如从小到大、从大到小)重新排列成有序序列。为什么重要?随数据量 n 增长的运行时间,通常关注 最好 / 平均 / 最坏 三种情况。
Msshu1238 天前
数据结构·随机森林·贪心算法·排序算法·线性回归·启发式算法
2~5串锂电快充优选|XSP36 Type‑C升压/升降压快充管理芯片随着筋膜枪、手持吸尘器、园林工具、小型户外储能等锂电类产品普及,多串锂电池快充方案的选型,一直是硬件工程师重点关注的环节。传统线性充电芯片功率低、充电慢,普通升压方案协议适配差、容易拉垮适配器。XSP36作为专为2~5串串联锂电池设计的Type‑C输入升压快充管理芯片,集成快充协议、大功率升压、智能充电控制与全套安全保护,一站式解决多串锂电快充痛点
布莱克6058 天前
数据结构·c++·算法·排序算法
C++ 七大排序算法详解:选择、冒泡、插入、计数、堆、快速与归并排序排序算法是计算机科学中最基础也最重要的算法之一。无论是数据库索引、搜索引擎结果排序,还是日常开发中的数据处理,排序都无处不在。掌握排序算法的原理与实现,不仅能帮助我们写出更高效的代码,更是理解算法设计与复杂度分析的最佳入门途径。
LuminousCPP9 天前
c语言·数据结构·笔记·算法·排序算法
数据结构-排序(三):快速排序进阶|挖坑法、双指针交换与手动栈非递归实现上一篇 《数据结构-排序(二):快速排序从错误初版到优化版》 中,我从最开始的错误实现一路修改,完成了快速排序的基础递归版本,并进一步加入了两个优化:
Doubbbbbbble云9 天前
java·重构·排序算法
基于空间局部性的排序算法性能重构思路4现代计算机体系结构中,缓存机制对程序性能具有决定性影响。数据访问的局部性(包括时间局部性和空间局部性)直接影响缓存命中率,进而决定算法的实际运行效率。传统排序算法如快速排序、归并排序等在设计时多聚焦于理论复杂度优化,忽视了实际执行过程中对内存访问模式的考量。基于空间局部性的排序算法重构,旨在通过优化数据访问模式,提升缓存友好性,从而在真实硬件环境下实现更优性能。
洋不写bug10 天前
java·算法·排序算法·插入排序·冒泡排序·希尔排序·直接选择排序
排序(一)基础排序,插入|希尔|冒泡|直接选择排序详解hello hello💕,这里是洋不写bug~😄,欢迎大家点赞👍👍,关注😍😍,收藏🌹🌹 这篇博客会解析4个基础的排序算法,基础排序的算法原理比较简单,代码也比较好写,基础排序的时间复杂度比较高,因此在实际开发中很少会用到 学习基础排序能提高我们的代码能力和排序思维,先学透基础排序,后面学习进阶排序的时候就更好理解,而且基础排序相关的知识在面试时也可能会问到,所以还是需要了解下的💪💪💪 这个专栏的数据结构是代码都是用Java来写的,JavaSE专栏现在已经全部更新完成,铁汁们复习基础知
王老师青少年编程11 天前
c++·排序算法·csp-j·csp·高频考点·初赛·信奥赛
信奥赛csp初赛高频考点【排序算法】(详细解析)排序算法在CSP初赛中属于必考内容,考察形式以选择题为主,也可能在阅读程序或完善程序中涉及。核心考点集中在三个方面:稳定性、时间复杂度、算法原理与过程。
LuminousCPP12 天前
c语言·数据结构·笔记·算法·排序算法
数据结构 - 排序(二):快速排序从错误初版到优化版|双指针划分 + 三数取中 + 小区间插入优化上一篇《数据结构 - 排序(一)》中,我们把冒泡排序、直接插入排序、希尔排序、堆排序以及双向循环选择排序统一放进了性能测试工程,通过 10 万个随机整数观察不同排序算法在实际运行中的差异。