
数据结构与算法
文章平均质量分 54
记录自己的学习历程
只想学习的柑子
这个作者很懒,什么都没留下…
展开
-
基数排序
前言最近在学数据结构与算法,在此做一下记录,方便时不时复习一下。如果有什么做得不对的地方,恳请指出,万分感谢。简述基数是什么意思?对于十进制整数,每一位都只可能是0~9中的某一个,总共有10种可能,那么10就是它的基数。同理二进制数字的基为2;对于字符串,如果它使用的是8位的扩展ASCII字符集,那么它的基就是256.基数排序不是基于比较的算法。常见的数据元素一般是由若干位组成,比如字符串由若干字符组成,整数由若干位0~9数字组成。基数排序按照从右往左的顺序,依次将每一位都当做一次关键字,然原创 2021-05-19 22:53:23 · 464 阅读 · 0 评论 -
桶排序
前言最近在学数据结构与算法,在此做一下记录,方便时不时复习一下。如果有什么做得不对的地方,恳请指出,万分感谢。简述桶排序的工作原理:假设输入数据服从均匀分布,利用某种函数的映射关系将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或者是以递归方式继续使用桶排序)。桶排序利用函数的映射关系,减少了几乎所有的比较关系。实际上,桶排序的f(k)值的计算,其作用就相当于快排中的划分,已经把大量数据分割成了基本有序的数据块(桶),然后只需要对桶中的少量数据做排序即可。步骤1.判断原创 2021-05-13 22:49:22 · 134 阅读 · 0 评论 -
计数排序
前言最近在学数据结构与算法,在此做一下记录,方便时不时复习一下。如果有什么做得不对的地方,恳请指出,万分感谢。简述计数排序是一个排序时不比较大小的排序算法。如果一个数组里所有元素都是整数,而且都在0~k以内。对于数组里的每个元素来说,如果能知道数组里有多少项小于或等于该元素,就能准确地给出该元素在排序后的数组位置。比如下图:对于这个数组来说,元素5之前有8个元素小于等于5(含5本身),因此排序后5所在的位置肯定是下标为7的位置。只要构造一个(5+1)大小的数组,里面存下所有对应A中每原创 2021-04-29 21:50:39 · 2321 阅读 · 0 评论 -
堆排序
前言最近在学数据结构与算法,在此做一下记录,方便时不时复习一下。如果有什么做得不对的地方,恳请指出,万分感谢。简述应用场景:许多应用程序都需要处理有序的元素,但不一定要求它们全部有序,或者不一定要一次就将它们排序,很多时候每次只需要操作数据中的最大(最小)元素,那么有一种基于二叉堆的数据结构可以提供支持。二叉堆:就是一个完全二叉树的结构,同时满足堆的性质:即子节点的键值或索引总小于(或者大于)它的父节点。在一个二叉堆中,根节点总是最大(或者最小)节点。堆排序算法就是抓住了这一特点,每次都原创 2021-04-27 22:45:48 · 91 阅读 · 0 评论 -
快速排序
前言最近在学数据结构与算法,在此做一下记录,方便时不时复习一下。如果有什么做得不对的地方,恳请指出,万分感谢。简述快速排序算法是对冒泡排序的一种改进,也是采用分治法的一个典型应用。算法思想是先任意选取一个数据(比如数组中的第一个数)作为关键数据,把这个选取的数成为基准数(Pivot),然后将数组里面比它小的数全部放在它前面,比它大的数都放在它后面,这个过程结束之后为一次快速排序,也被称为一次分区排序。通过一趟快速排序将要排序的数据分割成为独立的两部分,其中一部分的所有数据都比另一部分的所有数原创 2021-04-22 21:05:05 · 182 阅读 · 0 评论 -
归并排序
前言最近在学数据结构与算法,在此做一下记录,方便时不时复习一下。如果有什么做得不对的地方,恳请指出,万分感谢。简述归并排序是建立在归并操作上的一种有效的排序算法,是采用分治法的一个非常典型的应用。基本思想是对于给定的一种数组,利用递归与分治技术将数据划分成为越来越小的半子表,在对半子表排序后,再用递归方法将排序好的半子表合并成为越来越大的有序序列。有时候为了提升性能,会在半子表的个数小于某个数(比如15)的情况下,对半子表的排序采用其他排序算法,比如插入排序。因为我这里是将两个有序表合并成为原创 2021-04-15 22:11:35 · 112 阅读 · 0 评论 -
希尔排序
前言最近在学数据结构与算法,在此做一下记录,方便时不时复习一下。如果有什么做得不对的地方,恳请指出,万分感谢。简述在学习希尔排序之前,最好学习一下简单插入排序,深刻了解一下简单插入排序内部的思想和代码的实现,因为希尔排序是一种基于插入排序的快速的算法。简单插入排序对于大规模乱序数组很慢,因为数组数据只能一个数据一个数据地从数组的一端通过比较移动到数组的另一端。比如,如果数组中最小的数据在数组的尽头,这时候想做升序排序,那么想要将它一到正确的位置就需要进行N-1次移动。希尔排序就是为了加快速度原创 2021-04-14 21:16:47 · 97 阅读 · 0 评论 -
简单插入排序
前言最近在学数据结构与算法,在此做一下记录,方便时不时复习一下。如果有什么做得不对的地方,恳请指出。简述简单插入排序有点像我们在打牌时的场景,一开始有五张牌,自己看着有点乱,先从左到右进行排序,可能由大到小,也可能由小到大,怎么排序看我们的心情,但是一旦排序之后,我们就不想动了。此时,重新摸一张牌,我们需要将新摸上来的这张牌进行排序,从后向前找到这张新牌该放在的位置。其实简单插入排序也是这个原理,当前面的数据有序时,我们该怎么将未排序的数据插入到前面已经排好序的数据当中去呢?步骤1.对于原创 2021-04-12 22:58:42 · 360 阅读 · 2 评论 -
简单选择排序
前言最近在学数据结构与算法,在自己手敲的前提下做一下记录,方便自己以后复习。如果有什么做得不对的地方,恳请指出。简述简单选择排序是不断地选择剩余元素之中的最大(小)值。简单选择排序相当于冒泡排序的优化,和冒泡排序的相同点是经过一次循环(查找)之后,把最大(最小)的元素放到数组的最前面(最后面);不同的是,冒泡排序是通过相邻的比较和交换,而选择排序是通过对整体进行选择,在确定了最大(最小)的情况下才进行交换,大大减少了交换的次数。步骤1.找到数组中最大(小)的元素;2.将找到的元素和数原创 2021-04-11 13:19:52 · 835 阅读 · 2 评论 -
冒泡排序
前言最近在学数据结构与算法,在自己手敲的前提下做一下记录,方便自己以后复习。简述冒泡排序是十大排序算法中最简单的一种了,它反复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。这个步骤会重复地进行直到没有元素需要交换,此时就说明数列已经排序好了。因为元素会经由交换慢慢“浮”到数列的一端(升序或降序),所以算法的名字叫冒泡排序。步骤1.从数组头开始,比较相邻的元素。如果第一个比第二个大(小),就交换它们 两个;2.对每一对相邻元素作同样的工作,从开始第一对到尾原创 2021-04-10 14:20:00 · 88 阅读 · 0 评论