大O记法与排序算法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/barlay/article/details/83536714

我们在描述算法的时间复杂度时都会用到大O记法,那么什么是大O记法呢?百度百科(大O符号)给出了比较准确的定义:它是用来描述一个函数的无穷大渐近。举个例子,解决一个规模为 n 的问题所花费的时间(或者所需步骤的数目)可以被求得:T(n) = 4n^2 - 2n + 2,那么当 n 趋近于无穷大的情况下,n方项起主导作用,所以它的时间复杂度可以被记为:O(n^2)
更加详细的介绍可见一下博客:
大O符号与时间复杂度
大O记号
常见算法的时间复杂度如下图所示:
常见排序算法的时间复杂度
排序算法的核心就是:Compare And Swap,简称CAS。
具体的排序算法介绍见博客:常用排序算法总结(一)
堆排序算法涉及到堆这种数据结构,详细的介绍如下:图解排序算法(三)之堆排序
为什么要介绍排序算法?因为排序算法是其它高效算法的基础:一堆数据只有排成顺序,我们才方便对它们的增删改查操作。
上面介绍的只是对数组的排序算法,那么如果数据的存储结构是链表呢?
下面的博客介绍了针对链表的排序算法,基本思想和数组的排序算法类似。
单链表排序
实现双链表的排序
PS. 如果数据结构是二叉排序树的话,直接对树进行遍历就会得到有序的数据。
常见的树的种类及相关的操作有很多,下面是最常用的红黑数的详解:
Sedgewick的红黑树
还有一个关于数据结构与算法的博客:
数据结构与算法学习笔记之 适合大规模的数据排序
最后放上一篇比较好的关于DDD的文章:
从壹开始微服务 [ DDD ] 之四 ║让你明白DDD的小故事 & EFCore初探

猜你喜欢

转载自blog.csdn.net/barlay/article/details/83536714