有序数组

有序数组跟上一章讨论的数组几乎一样,唯一区别就是有序数组要求其值总是保持有序。即每次插入新值时,它会被插入到适当的位置,使整个数组的值仍然按顺序排列。常规的数组则并不考虑是否有序,直接把值加到末尾也没问题。

往有序数组中插入新值,需要先做一次查找以确定插入的位置。这是它跟常规数组的关键区别(在性能方面)之一。

虽然插入的性能比不上常规数组,但在查找方面,有序数组却有着特殊优势。

查找有序数组

常规数组的查找方式:从左至右,逐个格子检查,直至找到。这种方式称为线性查找。

对于有序数组来说,即便它不包含要找的值,我们也可以提早停止查找。

有序数组的线性查找大多数情况下都会快于常规数组。除非要找的值是最后那个,或者比最后的值还大,那就只能一直查到最后了。

有序数组相比常规数组的一大优势就是它可以使用另一种查找算法。此种算法名为二分查找,它比线性查找要快得多。

二分查找

有序数组相比常规数组的一大优势就是它除了可以用线性查找,还可以用二分查找。常规数组因为无序,所以不可能运用二分查找。

二分查找与线性查找

每次有序数组长度乘以2,二分查找所需的最多步数只会加1。

数组长度翻倍,线性查找的最多步数就会翻倍,而二分查找则只是增加1步。

参考:数据结构与算法图解.2.1