查找
一、线性表的查找
①折半查找
仅适应于有序数组
思想:
首先就是要是有序的表,然后有三个指针,一个low,一个high,一个mid,分别表示最左、最右、中间。中间通过(low+high)/2 ,通过目标数不断的和mid对比,然后更新low或者high
代码实现:
总结:
②分块查找
代码思想:
有一个索引表存放着最大关键字和分块的区间。先用目标数和索引表的关键字对比,如果目标数小于关键字那就在该关键字去顺序遍历存储区间,否则就对比下一个关键字。
总结:
二、树表的查找
①B树(B-树)
定义:
结构:
总结:
h是树高,最小和最大
b树就是一个m阶排序平衡树。
②B+树
与b树一样,但是b+树非叶子结点不带数据,只有指针。而叶子节点就是带数据的
条件:
对比:
①
②
③
④
总结:
散列表的查找
总结:
排序
插入排序
直接插入
以一个元素的前面都是排序好了的,将该元素和前面的所有元素对比,直到对比到比该元素小的,然后将比该元素大的,都依次向前挪一位然后将该元素插入。
代码实现:
优化-折半插入:
代码实现:
唯一的改变就是在前面排好序的元素找到位置的地方使用了折半查找,查找该插入的位置。
就是前面的地方使用一次折半查找
希尔排序
交换排序
冒泡排序
快速排序
思想:选定一个元素为所谓的枢轴元素然后我们用low和high分别指向了带排序的序列最左最右,这两个往中间移动的时候我们每扫描到一个元素都会和枢轴元素对比,如果比枢轴元素小的会移动到low左边,比枢轴大的移动到右边,当low=high的时候就确定了枢轴元素的位置,当中间的49枢轴元素确定的时候就可以不用管中间了,我们就看左边和右边
对左右子表以相同的方法再次划分
代码实现:
总结:
选择排序
①简单选择排序
②堆排序
初始化根堆
归并排序
算法思路
代码初实现
全部代码
总结
基数排序
算法思路
基数排序只考手算不考代码
应用:
总结:
外部排序
就是一次性读两个快然后在内存中使用归并排序再写入外存
败者树:
k路对比最小很麻烦,所以出现败者树
什么是败者树
置换选择排序: