排序和搜索

来源:互联网 发布:cad数控冲床编程 编辑:程序博客网 时间:2024/06/13 08:48

一.排序

1.概念:排序是指将元素集合按照规定的顺序进行一种排列的算法。
注意:在排序问题中把数据元素叫做关键字,排序的依据也是按照关键字之间的大小进行排序。
2.分类:
(1)一般分为升序排序和降序排序
升序排序指的是集合中的元素按照升序的形式排列;
降序排序指的是集合中的元素按照降序的形式进行排列。
(2)分为比较排序和线性时间排序
比较排序依赖于比较和交换来将元素移动到正确的位置上,一般来说并不是所有的排序都依赖于比较,比较排序的时间复杂度一般都大于O(nlogn)
线性时间排序依赖于数据集合中的某些特征,但是只是适用于有些场景,并非全部场景都适用
(3)分为内排序和外排序
内排序是在排序的整个过程中,待排序的所有记录全部被放置在内存中。其中内排序又包含这些排序:插入排序,交换排序,归并排序,选择排序。
外排序是由于排序的记录个数过于多,不能同时将所有的元素放置在内存中,整个排序过程需要在内外村之间多次进行数据元素的交换才可以进行
3.常用排序算法的适用场景
(1)插入排序:最佳的应用场景是对一个小的数据集合进行递增排序。
(2)快速排序:一般认为快排是效率最高的,而且不需要额外的存储空间,最佳应用场景就是应用于大型数据集。
(3)归并排序:最佳的应用场景就是对于超级大的数据集的排序,因为归并排序的原理就是对于乱序的数据不断的进行对折分割。
(4)计数排序:是一种稳定的线性时间排序算法,当知道数据集中的整数的最大值的情况下会经常用到这个算法,主要是用来实现基数排序。
(5)基数排序:是逐位对元素进行排序的线性时间排序算法,基数排序适用于大小固定的元素集,并且其中的元素易于分割,且易于用整数表示。
(6)冒泡排序:时间复杂度为O(n^2)的低效排序算法,通过不断的比较元素并交换位置使得一个元素到达有序集合的正确位置上。
(7)选择排序:时间复杂度为O(nlogn)的算法
(8)堆排序:是一种使用堆的高校排序算法,时间复杂度为O(nlogn),并且不需要额外的存储空间,但是平均情况下它比快排要慢一个常数因子。
(9)内省排序:一种类似于快排的算法,只是在检测时,它会切换到堆排序,从而提高排序的效率,在某些情况下,它的排序效率要略高于快排算法。
(10)桶排序:一种线性排序算法,用来对均匀随机分布的数据进行排序,工作原理是首先将数据分散到一些桶中,然后将桶中的数据进行排序,从而最后形成一个有序的数据集。

二.搜索

1.概念:搜索就是在一个数据集合中找到某个数据元素的位置,这种算法就叫做搜索
2.搜索的分类:
(1)线性搜索:就是需要从数据集合的一端查找到另外的一端,它主要用于对随机访问支持不好的一些数据结构,比如链表
(2)二分查找也是一种搜索算法
(3)用于专门的数据结构,比如二叉树和哈希表

0 0