查找算法比较:
查找方法 | 算法描述 (ASL 平均查找长度) |
顺序查找 | 从表的一端开始,逐个比较记录的关键与给定值,直到找到返回。 |
折半查找 | 列表list已经排号顺序,将待查值key与表中间位置(mid)值比较,若相等则成功, 如key>list[mid]则在后半个子表mid+1~n中查找,如key<list[mid],则在前半个子表1~mid-1中查找, 直到查找成功为止。 |
分块查找 | 将表分为若干块,子块内部不一定有序,但子块间有序。再建立一个索引表,索引表关键字有序。 查找分两步:一、在索引表中找到待查数据所在块,二、在块内顺序查找。长度为n的表, 分为b块,每块s个记录。, ; |
二叉树查找 | 二叉排序树(左孩=小,中父=中,右孩=大),构建,删除,调整(平衡二叉树)。 |
Hash表查找 | 常用Hash构造方法:直接地址法、数字分析法、平方取中法、折叠法,随机数法、除留余法。 Hash 处理冲突处理方法: 开放定址法: , m为Hash表长度, 为增长序列, 常见增长序列有3种:
=伪随机数序列 链地址法:在Hash表每个记录中再增加一个链域,存放下一个具有相同Hash值的记录的地址。 |
排序算法比较:
排序方法 | 算法描述 | 时间复杂度 | 辅助空间 | 稳定性 | 使用场合 |
直接插入 | 插入第i个记录前,~已经排好序了。 将依次和 比较, 从而找到插入的位置, 插入后其后面的记录依次后移。 |
稳定 | 记录数 较小, 基本有序 |
||
简单选择 | 第i个记录,通过再i+1到n找到 第i个最小(最大)的关键字,和位置i交换。 |
不稳定 | 记录数 较小 |
||
冒泡排序 | 进行 n-1 趟,每趟进行两两交换排序 | 稳定 | 基本有序 | ||
希尔排序 | 直接排序的改进。将记录分成若干子序列, 然后分别进行插入排序,待整个序列中的 记录基本有序,再全体进行一次插入排序。 |
不稳定 | 记录数 较大 |
||
快速排序 | 先经一次快速排序将记录分成前半区和后半区 ,前半区小于后半区, 然后对这两组继续进行快速排序。 |
不稳定 | 记录数 较大 |
||
堆排序 | 对记录按堆排成一个序列, 从而输出堆顶记录, 然后将剩余记录排成新堆,得到堆顶记录, 如此反复。 堆定义: 或 |
不稳定 | 记录数 较大 |
||
归并排序 | 将两个或两个以上的有序文件 合并成一个新的有序文件。 |
稳定 | 记录数 较大 |
||
基数排序 | 按组成关键字的各个数位值进行排序, 它时分配排序的一种。 将一个关键字 看成一个d元组, 即:,其中,i=1~n。 |
稳定 | 记录数 较大, 关键字 位数少 |