1. 查找技术
(1)顺序查找
查找过程:
从线性表的第一个元素开始,逐个将线性表中的元素与被查元素进行比较,如果相等,则查找成功;若整个线性扫描结束,仍未找到与被查元素相等的元素,则表示线性表中没有被查元素,查找失败。
前提要求:
线性表
查询次数:
最少1次,第一个元素就是要查的元素;
最多n次,最后一个元素才是要查的元素,或者查到最后都没发现要查的元素;
因此平均情况是n/2次。
只能顺序查找的情况:
线性表为无序表;
采用链式存储结构存储的表
(2)二分法查找
查找过程:
被查元素X
将X与线性表的中间元素比较,会有3中情况:
如果与中间项的值相等,则查找成功,结束查找;
如果X小于中间项的值,则在线性表的前半部分以二分法继续查找;
如果X大于中间项的值,则在线性表的后半部分以二分法继续查找。
前提要求:
1.用顺序存储结构
2.线性表是有序表,此处“有序”指的是非递减的顺序
查询次数:
最少1次,中间项就是被查元素;
最多是log2(n)次,查到最后刚好找到,或查到最后也没有。
相比于顺序查找优点:
顺序查找每一次比较,只能将查找范围减少1,而二分法查找,每比较一次可将查找范围减少为原来的一半,效率大大提高。
最坏情况的查找次数比顺序查找少。
2. 排序技术
(1)交换类排序法
① 冒泡排序
定义逆序:在数据元素的序列中,对于某个元素,如果其后存在一个元素小于它,则称之为存在一个逆序。
冒泡排序基本思想就是:通过两两相邻数据元素之间的比较和交换,不断消除逆序,直到所有数据元素有序为止。
最坏情况下,需要比较的次数为n(n-1)/2
② 快速排序
基本思想:在待排序的n个元素中任选一个元素K(通常选第一个元素),以元素K作为分割标准,把所有小于K元素的数据元素都移到K前面,所有大于K的都移到K后面。这样,以K为分界线,把线性表分割为两个子表,这个一次分割的过程又称为“一趟排序”。然后,对K前后的两个字表分别重复上述过程,直到分割的字表的长度为1为止,这时,线性表已经是排好序的了。
最坏情况下,与冒泡排序一样,也需要比较n(n-1)/2次,但是实际的排序效率比冒泡排序高得多。
(2)插入类排序法
① 简单插入排序
基本思想:把n个待排序的元素看作是一个有序表和一个无序表,开始时,有序表只包含1个元素,无序表包含n-1个元素,每次取无序表中的第一个元素插入到有序表中的正确位置,使之成为增加一个元素的新的有序表。插入元素时,插入位置及其后的记录依次向后移动。最后有序表长度为n,无序表长度为空,此时排序完成。
最坏情况下,与交换类排序算法一样,也需要比较n(n-1)/2次
② 希尔排序
我没看明白
但是希尔排序的效率与所选取的增量序列有关。最坏情况下,需要比较n1~2。
(3)选择类排序法
① 简单选择排序法
基本思想:先从所有n个待排序的元素中选择最小的元素,将该元素与第1个元素交换,再从剩下的n-1个元素中选出最小的元素与第2个元素交换。重复操作直到所有的元素有序为止。
最坏比较次数,与交换类排序法和插入排序法中的简单插入排序法一样,都为n(n-1)/2。
② 堆排序法
将n个元素组成一棵完全二叉树,当满足一定条件的时候称为堆。
大根堆,所有节点的值大于或等于左右子节点的值。
小根堆,所有节点的值小于或等于左右子节点的值。
最坏比较 nlog2(n)次。