数据结构(下)
排序算法
有关学过的排序算法主要有八种:
直接插入
1.首先对于前两个元素进行排序;
2.对第三个元素与前两个元素的较大者比较,若小,则继续往前比较,若小,则放在后面即可。
3.重复上面的步骤,直到比完最后一个元素。
冒泡排序
1.每相邻两元素查找一遍,找到最大(最小)的元素,放在数组尾部
2.多次重复查找最大(最小元素)
3.直到找到最后一个元素,冒泡完成。
选择排序
1.第一个元素和其他元素相比,如果比其他元素小(大),就和他们交换,直到选出最小(大)的元素
2.多次循环第一步,直到选出最后一个最小(大)的元素放在已排序的序列最末尾。
快速排序
1.找到第一个关键词(一般为第一个数字),从末尾开始如果比他小就和他交换,交换后从前面开始;比他大就不变继续向前推进。此过程称为一趟快排。
2.进行一趟快排之后,对左边和右边的未排序的两个序列再次递归排序,直到细分到一个元素就可以返回此序列。
堆排序
1.首先创建一颗大根堆,创建方法就是通过不断地筛选,即从第【n/2
】个元素起,不断向上进行筛选,直到筛选到最顶上一个元素。(将根结点值与左、右子树的根结点值进行比较,并与其中大者进行交换;重复上述操作,直至叶子结点,将得到新的堆,称这个从堆顶至叶子的调整过程为“筛选”。)
2.让第一个元素和最后一个元素进行交换,然后再将剩下的元素继续调整成为大根堆,从第【k/2】个元素起,调整。重复第二步,直至最后一个元素
归并排序
- 将所有元素分开成n个元素(递归实现)
- 两个元素合并一起,排序成为一个新序列。合并就是通过第一个元素的指针跟第二个元素的指向的元素相比,如果比他小(大),就进入另一个队列,如果比他大(小),就将另一个指针指向的元素进入队列。
- 多次合并之后,将整个序列排序完成。
基数排序
1.首先找到应该的关键词,按照先后顺序进行排序(重要性大的在后面)
2.按照某个关键词,比较所有元素,让元素分别进入不同的队列(分配)
3.将队列里面的元素按照顺序收集,进入一个大队列。
4.进过多次分配和收集之后将所有的关键词都完成一次分配和收集。
希尔排序
希尔排序就是通过间隔多个进行冒泡排序,之后逐个减少(可以用除2的做法进行间隔的减少),排序之后,直到最后1的时候就是插入排序。
外部排序算法
外部排序算法就是多路归并排序
所有的排序算法如下面的文章所示:
八大排序算法
查找
直接查找
如果没有任何关系可言的序列,可以直接通过一个一个遍历的方法进行查找,这样的平均查找次数是n/2次
折半查找
折半查找的算法是基于有序序列而言的,即通过从中间开始,查找元素和中间元素相比较,进行不断地查找。这样的查找次数是logn次。
哈希表查找
哈希表查找理论上查找次数就是1,理论上哈希表是通过哈希函数计算出元素存放位置,从而对元素进行处理。但是对于哈希表查找相同的元素放在同一个位置的时候,会产生哈希冲突。