数据结构与算法
文章平均质量分 51
常用数据结构与算法
VNanyesheshou
Android音视频开发
展开
-
排序算法——计数排序
计数排序是一种非基于比较的排序算法。 基本思想:对于给定序列,找出其中的最大值和最小值,对于给定的输入序列中的每一个元素,确定该序列中值等于x的元素的个数(此处并非比较各元素的大小,而是通过对元素值的计数和计数值的累加来确定)。通过这些信息可以确定 最小值~最大值范围内各个元素的 个数,从而可以正确放到指定位置。 1 算法步骤 确定序列中的最大值max和最小值min; 创建数组countAry,长度为(max - min + 1); 统计原序列中每个值为i的元素出现的次数,存入数组countAry的第原创 2021-03-02 21:00:35 · 278 阅读 · 0 评论 -
排序算法——快速排序
快速排序(Quicksort)是对冒泡排序算法的一种改进。 基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 1 算法步骤 从数列中挑出一个元素,称为 “基准”(pivot); 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为原创 2021-03-01 21:57:23 · 156 阅读 · 5 评论 -
排序算法——希尔排序
希尔排序(Shell’s sort),又称为“缩小增量排序”,是插入排序的一种改进版本。 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。 1 算法步骤 选择增量序列(这里我们使用希尔增量),{n/2, (n/2)/2, ((n/2)/2)/2,… 1} 其中n为数组长度; 先取增量 n/2,把数组分组,所有距离为n/2的倍数的数,为同一组,组内进行直原创 2021-02-27 11:02:25 · 314 阅读 · 0 评论 -
排序算法——插入排序
插入排序,也称为直接插入排序,其排序思想和我们平时打扑克牌时排序类似。 1 算法步骤 将第一个元素看作已排序序列,第二个到最后一个看作未排序序列。 第二个元素,与之前已排序号的序列进行对比,插入正确的位置(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。) 循环处理剩下的未排序序列。 效果图: 2 复杂度 当待排序数组是有序时,是最优的情况,只需当前数跟前一个数比较一下就可以了,这时一共需要比较N- 1次,最优时间复杂度为 O(n)O(n)O(n) 最坏的情况是待排序数组原创 2021-02-26 21:48:38 · 116 阅读 · 0 评论 -
排序算法——选择排序
选择排序(Selection sort)是一种简单直观的排序算法。 1 算法步骤 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置(或者末尾)。 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。 重复第二步,直到所有元素均排序完毕。 效果如下: 2 复杂度 选择排序的时间复杂度是固定的,最好最坏情况都是如此。 O(n2)O(n^2)O(n2) 空间复杂度为O(1)O(1)O(1) 选择排序比冒泡排序交换数据次数少很多,所以总体来说要快一些。 3 稳定性 选择排序是不原创 2021-02-24 13:43:34 · 155 阅读 · 0 评论 -
排序算法——冒泡排序
总结一下之前学习的排序算法,避免遗忘。 简介 冒泡排序(Bubble sort),是一种简单的排序算法。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 算法步骤 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一原创 2021-02-23 15:36:05 · 11437 阅读 · 4 评论