IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:排序算法

共 21 篇相关文章

IT 累计浏览 4,360

研发面试最常用的10大算法

算法题是研发面试中躲不过的一道坎。这篇没有泛泛而谈,作者直接从实际面试需求出发,为你梳理了程序员在代码面试中最常遇到的10大算法类型。 文章重点以 **String/Array/Matrix**(字符串/数组/矩阵)这一类为例,点明了面试的“陷阱”——题目表面看很简单,但解决往往需要动态规划、递归等高级算法思维。文中还贴心地附上了Java中操作字符串和数组的常用方法代码片段,非常实用。 除了数组字符串,文章还涵盖了如排序、二叉树、图、动态规划等核心题型,并列举了大量经典例题,例如“Two Sum”、“单词分割”、“最长回文子串”等。对于每个类别,它都点出了核心考察点和需要深入理解的原理。 这更像一份高效的面试算法备战地图,帮你厘清重点,把有限的精力投入到真正需要花功夫去理解的算法原理上,而不是盲目刷题。

IT 累计浏览 2,740

有追求优秀之心的程序员

这篇文章从一条引发热议的微博出发,探讨了当下程序员群体中基础能力参差不齐的现象。作者指出,行业门槛降低使得许多仅能“完成任务”的个体进入,但这并不应成为放弃专业追求的理由。 文章的核心观点是,区分“普通”与“优秀”程序员的关键,在于是否具备“追求优秀之心”。作者以面试者连冒泡排序都不会写为例,强调基础逻辑思维的重要性。优秀的程序员不仅能实现功能,更擅长进行业务抽象,通过合理的技术选型确保系统在苛刻条件下依然准确可靠。 最后,文章鼓励那些理解程序内在、能进行逻辑抽象的程序员,应当认识到自己的稀缺性与价值,相信自己“出身高贵”,理应获得更好的回报。整篇文章在技术讨论中,传递了关于职业尊严与自我期许的思考。

IT 累计浏览 5,643

Java程序员必知的8大排序算法

这篇讲的是Java程序员几乎绕不开的排序算法集合。排序是编程基础,但很多人可能只记得零散的冒泡和快排,对其他几种知其然不知其所以然。这篇文章就系统性地梳理了直接插入、希尔、简单选择、堆排序等经典算法。 它不像教科书那样堆砌公式,而是像一张清晰的导航图,先用一张图展示8种排序之间的演进与关系,帮助读者建立整体认知。对于每一种算法,都拆解成三部分:先讲清楚核心思想和解决问题的逻辑,比如堆排序如何借助“堆”这种数据结构进行树形选择;然后给出一个直观的排序实例图,让抽象过程可视化;最后附上可直接运行的Java代码,将思想落地。 尤其值得一提的是,文章在讲解复杂算法(如堆排序)时,通过分解“建堆”和“交换”两个关键步骤的可视化过程,让算法的巧妙之处一目了然。这种从原理、图示到实现的递进式讲解,能帮助开发者不仅学会怎么用,更理解算法背后的设计考量,从而在面对不同数据规模或特征时,能更从容地做出选择。

IT 累计浏览 3,481

利用js排序html表格

这篇讲的是作者如何用JavaScript在前端直接实现HTML表格的排序功能。他不想依赖服务器端,而是把整个问题拆解成了四个清晰的步骤来处理。 核心思路很直观:首先,通过点击表头获取需要排序的列索引,并将对应列的文本数据收集进一个数组。接着,利用数组的 `sort()` 方法,通过一个切换的标志位来实现升序与降序的交替排序。 最巧妙的步骤在于数据匹配与视图重建。排序完成后,他遍历排序后的数组,将表格中对应的原始行(``)克隆并暂存到一个隐藏的 `

` 里。最后,清空原表格,把表头克隆回去,再将暂存区的行按新顺序追加到表格中,完成刷新。 作者反复强调,在实现这类特效时,清晰的解题思路比对语言本身的精通程度更重要。文末附有完整的可运行代码与效果图,便于读者直接实践这个“收集-排序-匹配-重建”的通用流程。

IT 累计浏览 6,920

15道使用频率极高的基础算法题

这篇讲的是程序员面试中常见的15道基础算法题的思路解析与实现。作者从链表操作、数组处理、二叉树和栈队列等经典数据结构入手,详细拆解了合并排序、删除节点、查找倒数第K个节点、反转链表等高频考点。文章不仅列出了问题,更关键的是提供了具体的解题策略,比如用双指针在O(1)时间内删除节点,通过两个栈实现队列,以及利用后序遍历构建二叉树镜像等。每道题都附有清晰的C++代码示例和关键步骤注释,将抽象的算法逻辑转化为了可运行的实现。这些题目覆盖了排序、查找、递归、位运算等多个核心算法思想,对于夯实编程基础和准备技术面试都是不错的实战参考。

IT 累计浏览 2,120

天猫导航的内部机制揭秘

这篇讲的是天猫搜索结果页上方那个看似简单的导航栏,其背后的智能推荐机制。 文章从一个常见场景切入:当用户搜索意图不明确时,导航区的类目和属性推荐就成了帮助他们找到商品的关键。作者务达揭示,这些导航项并非静态存储,而是通过算法动态生成和排序的。 具体来说,导航分为类目导航和属性导航,其推荐逻辑依赖于离线生成的词表。核心算法基于每个(Query,搜索类目)对的点击、成交和商品数数据,进行线性加权排序,决定展现哪些类目/属性以及它们的排列顺序。例如,属性推荐就细分为根类目、公共类目和叶子类目下的属性,当某个属性分数占比极高时,会直接进行“属性预选”展示。 整套系统每天承载着约3000万PV的展现量,是天猫搜索导购链路中的重要一环。文章将智能导航的架构、排序算法以及具体的展现逻辑梳理得清晰透彻,揭开了这个常见却容易被忽视的功能背后的技术面纱。

IT 累计浏览 4,504

Learning to rank在淘宝的应用

这篇讲的是淘宝搜索排序系统如何从传统手工调参进化到机器学习自动化调整的实践。作者从排序优化的核心难点切入:传统方法依赖人工特征调优和反复AB测试,效率低且难达最优。为此,团队在已有特征体系上应用了Learning to Rank技术,项目内部命名为Jazz。 其核心方案是采用pairwise方法来构建训练数据,但做法很有淘宝特色:没有像常规那样做耗时耗力的人工标注,而是直接利用用户的点击和购买行为数据自动生成商品对。同时,为了保证排序稳定性,还混合了部分原始排序的样本进行分层抽样。模型训练后,通过计算NDCG指标在线下评估效果,显著缩短了测试周期。 文章详细拆解了从数据生产、模型训练到效果评估的全流程架构,并坦诚分析了pairwise方法在具体实施中遇到的挑战,比如与传统论文中描述不同的样本构建思路。这种将工业级实践与算法原理结合的分享,清晰地展示了机器学习技术如何解决真实业务中的复杂排序问题。

IT 累计浏览 4,582

深入浅出选择类排序算法(简单选择排序,堆排序)

这篇文章讲的是两种经典的选择类排序算法:简单选择排序与堆排序。作者从基本思想出发,用一个有趣的比喻——在班级中依次选择最喜欢的“女朋友”——生动解释了简单选择排序如何工作:每一轮遍历未排序部分,找出最小值放到已排序序列末尾。它的实现直观,但时间复杂度固定为O(n²),无法避免大量的比较操作。 堆排序的讲解则更深入。它将待排序序列构建成一个完全二叉树(大顶堆或小顶堆),利用“父节点总是最大(或最小)”的性质,通过反复交换堆顶元素与末尾元素并调整堆来完成排序。文中详细演示了建堆和递归调整的过程,并附有代码。这种基于二叉树结构的方法,将最坏情况下的时间复杂度提升到了O(nlogn),同时保持O(1)的空间复杂度。 两者虽然同属选择排序范畴,但效率差异显著。简单选择排序逻辑简单、易于实现,适合数据量小或对稳定性有要求的场景;堆排序则凭借更优的时间复杂度,在处理大规模数据时表现突出,是许多高效排序系统的基础。

IT 累计浏览 1,801

微博强媒体与生态平衡

这篇讲的是微博作为媒体平台的特殊性及其生态平衡问题。作者从微博的内容传播机制出发,指出其天然的“强媒体”属性——信息流快速、公开、具有舆论放大效应。这种属性让微博在热点事件中能迅速凝聚公共注意力,但也带来了生态失衡的风险:流量过度集中于头部大V和争议性话题,普通创作者和深度内容被挤压。 文章深入分析了微博为维持生态健康所做的调整,比如通过算法干预、流量分配策略来扶持垂直领域创作者,并限制过度营销和煽动性内容。作者认为,平台必须在“媒体属性”与“社区属性”之间找到动态平衡,既要保持热点传播的效率,也要给多元、温和、专业的内容留出生长空间。 对于技术产品和社区运营者来说,这篇文提供了关于平台治理的具体思考:如何通过规则设计和算法调节,在商业目标与生态健康之间取得共赢。

IT 累计浏览 2,882

统计汉字/英文单词数

这篇讲的是如何用一个Python脚本,精准统计混合文本中汉字和英文单词的数量,并按出现频率排序。 程序的核心任务是处理同时包含中英文的文本文档。作者需要解决两个基础问题:一是准确区分汉字与英文单词,二是分别统计它们的出现次数。实现上,可以利用字符编码范围来识别汉字(例如,在UTF-8或Unicode中,汉字有特定的码点区间),并使用正则表达式来匹配和提取英文单词。 更进一步,统计结果需要逆序排列,即让出现频率最高的汉字或单词排在最前面。这可以通过构建字典或使用Python的collections.Counter来计数,再结合sorted函数根据值(频率)进行排序。其巧妙之处在于,这种区分处理和频率排序能让文本的特征一目了然——无论是分析一篇文章的用词风格,还是快速了解一段代码注释或用户反馈的语言构成,都能立刻抓住重点。 整个实现虽然代码量不大,但逻辑清晰,从字符识别到频率分析形成了一个完整的闭环。对于需要快速处理混合语言文本数据的场景,这是一个非常实用的工具雏形。

IT 累计浏览 2,380

Filesort过程

这篇文章深入MySQL源码,剖析了Filesort这一经典排序过程的具体实现。作者从源码阅读出发,清晰地展示了当查询需要排序而索引无法直接满足时,MySQL如何通过Filesort机制完成操作。 其核心在于一套高效的双buffer(sort_buffer)排序算法。文章指出,当数据量较小时,排序在内存中完成;而一旦数据量超出内存限制,系统会分批次将数据写入临时文件,再进行多轮归并排序,最终产出有序结果集。这个过程中,对内存的合理利用和磁盘IO的优化,是实现高效排序的关键。作者对其中“利用堆排序进行多路归并”等实现细节的解读,让我们看到了设计上的巧妙与务实。 通过源码级的拆解,这篇文章将原本抽象的排序过程变得具体可感,不仅解释了Filesort“是什么”,更说清了它“如何高效工作”。对于想理解MySQL查询执行内部机制、优化排序性能的开发者而言,这是一次扎实的源码追踪之旅。

IT 累计浏览 5,442

数学之美:Hacker News的热门排名算法

这篇解析了Hacker News如何用一套简洁的算法,将用户投票转化为热门排名。作者从HN独特的“无反对票”机制出发,拆解了其背后隐藏的数学公式——一个基于时间衰减和投票权重的平衡模型。文章详细说明了算法如何让一篇新闻在发布后,通过早期的少量高质量投票快速获得曝光,又如何随着时间推移和热度饱和而自然下沉。特别指出了算法设计中对“新鲜度”与“讨论度”的精妙权衡,解释了为什么一些深度技术讨论能在榜单上保持数日。这种设计避免了简单排序可能导致的“爆款垄断”,为长尾优质内容创造了持续可见的空间。

IT 累计浏览 3,801

排序算法 Sleep Sort

排序算法是程序员入门必修课,从冒泡、快速到归并,大家可能已经习以为常。这篇讲的是一个有点“恶搞”意味的排序算法——Sleep Sort。它的核心思想非常奇特:要排序一组数字,就为每个数字启动一个线程,让该线程休眠对应的毫秒数。当休眠时间结束,线程被唤醒,按照被唤醒的先后顺序输出数字,就得到了从小到大的排序结果。 这种排序方式完全绕开了比较和交换,而是利用操作系统线程调度和定时器来“等待”结果。它的实际时间复杂度很高(O(n * max_value)),且依赖于并发环境,并不适合真实的生产场景。不过,它生动地演示了并发编程的另一面:有时候,等待也是一种处理数据的方式。 作者将Sleep Sort称为“巨NB”的算法,更多是在分享一种跳出常规思维的乐趣。它本身可能没有实用价值,但作为一种算法思想的展示,或者说一个有趣的编程谜题,它确实能让我们从不同的角度思考排序问题。

IT 累计浏览 2,661

以求医为例谈搜索引擎排序算法的基础原理

这篇文章从一个非常生活化的场景——“求医”,来拆解搜索引擎排序算法这一复杂技术背后的基础逻辑。作者将搜索引擎比作一个线上的“赛华佗”,面对用户提交的“病症”(查询),需要从海量的候选结果中,按“从先到后”的次序给出一份诊疗方案(搜索结果列表)。 文章的核心在于阐释这份“诊疗方案”的排序标准。它清晰地指出,排序算法本质是在权衡几个关键信号:首先是“相关性”,即结果是否直接回答了问题;其次是“权威性”,好比医院的等级和医生的口碑,对应到网页就是其质量和被引用的程度;最后可能还包括“时效性”。作者用这个比喻将抽象的技术原理(如早期的PageRank算法思想)变得易于感知。 此外,文章还触及了排序算法面临的现实挑战,比如如何平衡信息质量与商业因素(如竞价排名),这使得排序问题不仅是技术问题,也成为了影响信息获取公平性的社会问题。通过这个生动的例子,读者能快速建立起对搜索引擎核心工作原理的直观理解。

IT 累计浏览 2,802

创业与梦想

这篇探讨的是创业浪潮中“梦想”这个关键词的真实分量。作者从互联网史上那些标志性的创业传奇切入,梳理了从雅虎、谷歌到Facebook的共同轨迹:它们都诞生于校园的一隅,却凭借改变世界的愿景成为了全球巨头。这种叙事深刻影响了如今的创业文化,使得“有激情、有梦想”成了许多初创公司招聘时的标配口号。 文章并未停留在复述传奇,而是将视线拉回现实,剖析了这种“梦想驱动”模式背后的复杂性。它指出,当“梦想”被简化为一句响亮的口号时,可能忽略了创业过程中至关重要的执行能力、技术积累与市场洞察。作者提醒我们,真正的创业精神,既需要仰望星空的勇气,也离不开脚踏实地的耕耘,尤其是在一个创业已从特殊现象逐渐成为普遍选择的今天。 对于读者而言,这篇文章的启发在于,无论身处创业洪流还是职场生涯,都不应将“梦想”与“激情”空洞化。它鼓励我们更理性地审视驱动自身行动的核心要素,思考如何将宏大的愿景转化为扎实的、可执行的步骤,从而在充满不确定性的旅程中,找到属于自己的坚实道路。

IT 累计浏览 5,724

IMDB评分排名算法

这篇文章详细拆解了IMDB最知名的TOP250榜单背后那套不那么透明的评分与排名算法。它并非简单平均所有用户的打分,而是采用加权平均分,结合了投票数、平均分等多个维度。一个核心规则是,想入围TOP250,电影必须至少收到1250张正式投票,这就解释了为何一些小众高分作品始终缺席榜单。 作者还点出了这个系统的精巧设计:它是一个动态名单,评分和排名会持续变化,但经典影片的位置往往稳固,从而使其成为反映大众电影品味的可靠风向标。评分采用从“1分(awful)”到“10分(excellent)”的十档制,而最终榜单不仅参考平均分,也考量了选票的规模与分布,确保结果的代表性。文章最后也坦承,这个旨在发现“最受大众欢迎”电影的机制,天然会过滤掉那些“曲高和寡”的作品,这既是其局限,也是其明确的定位。

IT 累计浏览 3,340

常见的几种淘宝店主营销手段

这篇文章从作者多年的网购经验切入,梳理了在淘宝店铺中观察到的几种典型营销策略。它并非理论分析,而是一份来自真实消费视角的归纳。 作者指出,这些手段往往围绕着刺激即时消费、提升客单价与增强用户粘性展开。比如,通过“满减”或“第二件半价”来鼓励凑单,巧妙地将一件购物车的商品变成多件;利用“限时折扣”或“库存告急”标签,营造稀缺感和紧迫感,促使用户迅速下单;此外,建立会员体系、发放店铺优惠券、设计带有品牌元素的赠品小卡,这些做法都在潜移默化中培养着顾客的归属感和复购习惯。 文章的价值在于,它把这些散落在日常购物中的细节系统性地呈现了出来,既帮助普通消费者看清商家的运营思路,也可能为同行或对电商运营感兴趣的人提供一些接地气的参考。这些看似简单的招数,背后是对消费心理和平台工具的熟练运用。

IT 累计浏览 10,001

腾讯-1亿个数据取前1万大的整数-题解答

这篇讲的是腾讯一道经典面试题:如何从1亿个整数中高效找出最大的1万个。面对如此庞大的数据量,直接排序或全部加载显然不现实,题目考察的是对海量数据处理算法的理解与灵活运用。 作者从最朴素的思路讲起,逐步分析各种方案的优劣。比如使用最小堆维护前1万大元素,但需权衡时间与空间成本;或者利用分区思想,类似快速选择算法,在O(n)时间内逼近结果。文章重点剖析了在真实场景下,如何根据数据特征(如内存限制、整数范围)选择最合适的策略,并对比了不同方案的性能开销。 解题过程中涉及的关键点包括:外部排序、分治思想、堆结构以及抽样估算。作者特别指出,面试场景下清晰阐述思路比追求“完美解法”更重要,同时提醒注意边界条件,比如数据重复或负数的情况。最后总结出处理这类问题的核心原则:用空间换时间,或者用时间换空间,关键在于准确理解约束条件。

IT 累计浏览 2,701

看看人家是怎么样改版的?

一篇关于产品改版决策的文章,直接点出了一个普遍却常被忽视的痛点:许多时候,改版的驱动力来自“领导拍板”,而非扎实的数据分析。作者从这一现状切入,揭示了这种决策模式可能带来的风险——改版效果缺乏客观衡量,容易陷入主观臆断,最终难以判断是否真正解决了用户问题或提升了关键指标。 文章探讨了如何在改版流程中建立以数据为基石的文化。它强调,在启动任何改版前,应先明确要解决的具体问题(例如转化率低、用户流失等),并通过数据分析定位问题的根源。文中可能对比了“数据驱动”与“经验驱动”的决策方式差异,并暗示了前者在规避风险、提升改版成功率上的优势。 通过指出行业中的常见误区,这篇文章启发读者反思:下一次产品迭代时,我们是该继续依赖直觉与权威,还是应该让数据成为引导方向的明灯?这对于任何希望提升产品迭代效能的团队,都是一次有价值的提醒。

IT 累计浏览 2,980

Oracle排序算法

这篇讲的是Oracle数据库排序机制的一个有趣问题。作者从Jonathan Lewis在圣诞节发布的技术小测入手,揭示了Oracle在执行ORDER BY操作时,排序算法的选择并非一成不变,而是会受到数据特性、内存设置等多种因素的动态影响。 文章的核心在于剖析了Oracle内部两种主要排序方式——“直接路径排序”与“常规路径排序”——的运作原理与切换逻辑。作者通过具体的测试案例展示,当排序操作涉及的数据量、PGA内存配置达到某个临界点时,优化器会做出不同的选择,进而对查询性能产生显著影响。 一个关键发现是,排序过程中的“中间结果”可能会被以特定的压缩格式存储,这巧妙地平衡了内存消耗与I/O开销。文章的启发在于,理解数据库内核这种“因地制宜”的自适应行为,能帮助DBA更精准地诊断性能瓶颈,并在配置优化时做出更符合实际场景的决策。