第五章 搜索与排序

知识点:

1. 线性搜索。

Python自带函数 in, 线性搜索,及遍历一遍输入数组,直到找到特定所需元素。最糟情况复杂度O(n)。

排序过的序列搜索,Listing 5.2,复杂度没有变化,多加入一步判断。

寻找最小值,复杂度也一样。

2. 二分查找

分治思想。排序后的线性搜索虽然会轻微的提升算法复杂度,但效果不明显。 复杂点在于首先得对序列排序后才能进行二分查找。

复杂度为O(logn),如4.12节讲,每次输入如果是减半的话,复杂度为log。

3. 冒泡排序 

Python内置sort(),但使用范围很窄。每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序。仅仅比较相邻两个元素,若后一个大于前一个就互换,第一轮必定会把最大的放到最后,之后每轮比较的元素个数递减1。每一次外循环总会把当前序列中的最大值放到当前序列的最后。复杂度为O(n平方)。由于循环的嵌套和交换,效率低下。考虑若序列已经排序,则任然需要一样的复杂度,因为方法不知道已经排序了的。

书中方法没有利用到pythonic

4. 选择排序

每次找到未排序中最小的(最大的也行)元素的位置,找到后与该位置与未排序序列的第一个元素交换值,直到该序列成为有序序列。初始状态整个序列为无序序列,每次交换都使有序序列的长度加一,无序序列的起始位置后移一位。选择排序的平均时间复杂度为O(n^2)。

5. 插入排序

每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。


你可能感兴趣的:(第五章 搜索与排序)