`
m635674608
  • 浏览: 5041329 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

排序算法 汇总 【笔记】

 
阅读更多

序算法汇总 这里记录一下各种排序算法的比较和特性,主要摘自维基百科 稳定的

冒泡排序(bubble sort) — O(n2)
鸡尾酒排序 (Cocktail sort, 双向的冒泡排序) — O(n2)
插入排序 (insertion sort)— O(n2)
桶排序 (bucket sort)— O(n); 需要 O(k) 额外空间
计数排序 (counting sort) — O(n+k); 需要 O(n+k) 额外空间
合并排序 (merge sort)— O(n log n); 需要 O(n) 额外空间
原地合并排序 — O(n2)
二叉排序树排序 (Binary tree sort) — O(n log n)期望时间; O(n2)最坏时间; 需要 O(n) 额外空间
鸽巢排序 (Pigeonhole sort) — O(n+k); 需要 O(k) 额外空间
基数排序 (radix sort)— O(n·k); 需要 O(n) 额外空间
Gnome 排序 — O(n2)
图书馆排序 — O(n log n) with high probability, 需要 (1+ε)n 额外空间

不稳定

选择排序 (selection sort)— O(n2)
希尔排序 (shell sort)— O(n log n) 如果使用最佳的现在版本
组合排序 — O(n log n)
堆排序 (heapsort)— O(n log n)
平滑排序 — O(n log n)
快速排序 (quicksort)— O(n log n) 期望时间, O(n2) 最坏情况; 对于大的、乱数列表一般相信是最快的已知排序
Introsort — O(n log n)
Patience sorting — O(n log n + k) 最坏情况时间,需要 额外的 O(n + k) 空间,也需要找到最长的递增子串行(longest increasing subsequence)

不实用的排序算法

Bogo排序 — O(n × n!),最坏的情况下期望时间为无穷。
Stupid sort — O(n3); 递归版本需要 O(n2) 额外存储器
珠排序(Bead sort) — O(n) or O(√n), 但需要特别的硬件
Pancake sorting — O(n), 但需要特别的硬件

平均时间复杂度

平均时间复杂度由高到低为:

冒泡排序 O(n2)
插入排序 O(n2)
选择排序 O(n2)
归并排序 O(n log n)
堆排序 O(n log n)
快速排序 O(n log n)
希尔排序 O(n1.25)
基数排序 O(n)

说明:虽然完全逆序的情况下,快速排序会降到选择排序的速度,不过从概率角度来说(参考信息学理论,和概率学),不对算法做编程上优化时,快速排序的平均速度比堆排序要快一些。 实际测试结果

分享到:
评论

相关推荐

    C语言指导书 数据结构随堂笔记 散列表 排序汇总

    排序汇总.doc的编排则集中于排序算法的学习和总结,排序算法是计算机科学中极其重要的基础内容。从简单的冒泡排序、选择排序和插入排序到高效的快速排序、归并排序和堆排序,每种排序算法都有其独特的实现方法和应用...

    收集算法题汇总(学习用的好资料)

    1. **掌握基本算法**:如排序(快速排序、归并排序等)、搜索(二分查找、深度优先搜索等)和图论(最短路径、最小生成树等)。 2. **提高数据结构理解**:涉及数组、链表、栈、队列、树、哈希表等常用数据结构的...

    技术博客笔记大汇总,包括Java基础,线程,并发,数据结构;Android技术博客等等;常用设计模式;常见的算法;网.zip

    7. **常见算法**:算法是解决问题或执行任务的步骤,包括排序(如冒泡排序、快速排序)、查找(如二分查找、哈希查找)、图算法(如Dijkstra最短路径算法)等。理解并熟练运用算法能提高代码效率和解决问题的能力。 ...

    第一阶段笔记汇总.zip

    而算法则是解决问题的步骤,如排序算法(冒泡排序、快速排序)、查找算法(二分查找)等。理解和熟练运用这些数据结构和算法能够提高程序效率。 4. **操作系统原理**:这包括进程管理、内存管理、文件系统、I/O操作...

    C语言个人学习笔记汇总

    总之,这份“C语言个人学习笔记汇总”覆盖了从基础到高级的C语言知识点,结合实际的数据结构和算法练习,将使你的编程技能得到全面提升。通过深入学习和实践,你可以逐步成长为一名熟练的C语言程序员。

    麻省理工学院算法导论(中英文版包括原版教材、上课笔记、测试、课后作业等)

    划的两个应用,随机化和线性规划技术的近似算法等,还有有关递归求解、快速排序中用到的划分方法与期望线性时间顺序统计算 法,以及对贪心算法元素的讨论。本书还介绍了对强连通子图算法正确性的证明,对哈密顿回路...

    leetcode曼哈顿距离-algorithm:数据结构研究笔记和LeetCode日常算法题汇总

    每种排序算法都有其特点和适用场景,例如快速排序平均时间复杂度低,归并排序稳定但需要额外空间。 “线程题目”涉及到并发编程,这是多核处理器时代的重要主题。线程间的同步、互斥、死锁等问题是这个部分的重点,...

    (CPT101)的笔记汇总.zip

    课程会涉及算法设计与分析,包括排序算法(如冒泡排序、快速排序)、查找算法(如线性查找、二分查找)等。理解算法的工作原理,能够编写出解决问题的逻辑代码,是成为一名合格程序员的关键。 三、数据结构 数据...

    Java架构面试专题汇总(含答案)和学习笔记.rar

    理解基本的排序算法、搜索算法、图论和动态规划等概念是必要的。 综上所述,这个压缩包提供的资料全面覆盖了Java开发者从基础到高级的技能,包括Java语言、分布式服务、消息中间件、数据库优化、NoSQL以及Web服务器...

    面试(计算机相关资料,C++,算法和数据结构,操作系统,linux)

    算法涉及问题解决的逻辑步骤,包括排序、搜索、图论、动态规划等。熟练掌握算法能提高程序的效率。数据结构如数组、链表、栈、队列、树、图、哈希表等,是存储和组织数据的方式,它们的选择直接影响算法的实现和性能...

    编程笔记(Alexander Stepanov).pdf

    本书《编程笔记》是他关于编程思想和技术的一系列讲座的汇总。在前言部分,斯蒂潘诺夫介绍了编写此书的目的和背景,以及读者需要具备的基本知识。 **第一讲**主要是为整个系列奠定基础,通过介绍编程的基本概念和...

    Algorithm:基本数据结构和算法学习笔记(持续更新中...)。慢慢滴〜包括基本的数据结构和算法,如数组,链表,字符串,树,图,dp等...还有很多算法刷题代码,目前我和我女朋友一起开发。欧拉拉〜欧拉拉〜

    树的操作包括查找、插入和删除,而二叉搜索树和排序二叉树等还有特定的高效搜索算法。 图数据结构则用于表示对象之间的复杂关系,如社交网络、交通网络等。图可以是无向的,也可以是有向的,可以有边的权重,也可以...

    R200条笔记.zip

    其次,笔记可能涉及了R中的数据操作,包括数据清洗(如使用dplyr包进行筛选、排序、分组和汇总)、数据转换(如使用tidyr进行数据重塑)以及数据可视化(如使用ggplot2创建高质量图表)。这些是数据预处理的关键步骤...

    MapReduceV2笔记

    例如,在订单分类统计案例中,需要理解map阶段如何处理输入数据并输出中间键值对,在reduce阶段如何对这些键值对进行汇总和输出最终结果。在二次排序案例中,需要掌握二次排序的原理和实现方法,以及如何优化排序...

    leetcode中国-leetcode-PrimaryAlgorithm:这是学习leetcode初级算法笔记,以便后续的学习复习

    这是学习leetcode初级算法学习笔记,以便后续复习。 本部分于国庆最后一天10/8号更新完毕。本人相应的做法也标记在了后面,以提醒自己复习,当然我的做法肯定不是最好的,只是做个参考,欢迎到leetcode评论区讨论。 ...

    韩顺平php全套笔记.doc )

    - 数组的创建、遍历与排序算法(冒泡、选择、插入、快速)。 - **对象与类**: - 对象的基本概念与创建。 - 成员属性与方法。 - 构造与析构方法。 - 继承与接口。 #### 五、面向对象编程 - **OOP特性**: - ...

    leetcode和pat甲-Notes:学习笔记整理

    【排序算法】十大经典排序算法.md 【数据结构】二叉排序树.md 【数据结构】二叉树.md 【数据结构】优先级队列.md 【数据结构】字典树(trie树).md 【数据结构】平衡二叉树(AVL树).md 【数据结构】并查集.md 【数论...

    copy fofboiv sfbo .zip

    这份题库可能包括了对冒泡排序、选择排序、插入排序、快速排序、归并排序等多种排序算法的考察,以及线性查找和二分查找等查找算法的相关题目。掌握这些算法,不仅能帮助求职者在面试中脱颖而出,更能提升其解决实际...

    同济大学数据结构笔记

    ### 同济大学数据结构笔记知识点汇总 #### 第一章 绪论 1. **数据结构定义**:数据结构主要用于解决非数值计算的问题。 2. **数据的基本单位**: - 数据元素:数据的基本单位; - 数据项:数据的最小单位; - ...

    华为OD机考小结+算法编程试题一遍过

    - Labuladong的刷题三件套:包括《算法秘籍》和《刷题笔记》的PDF,以及一个刷题插件。 4. **核心知识点**: - 基础知识:字符串操作、数组、链表、队列和栈,排序、迭代、递归、二分查找。 - 进阶知识:树、堆...

Global site tag (gtag.js) - Google Analytics