数据结构与算法面试题(一)

一、常见的排序算法

数据结构与算法面试题(一)_第1张图片
排序算法比较
基本思想:

1、冒泡排序:两两比较相邻数据,逆序则交换,如果有一趟没有发生交换,说明排序完成。
2、简单选择排序:每一趟(第i趟)通过n-i次数据比较,从n-i+1个数据中选择最小的数据作为第i个数据。一共排n次。
3、直接插入排序:将待排序的数据分成有序序列和无序序列的两部分,每次从无序序列取一个数据插入到已经排好的有序序列中,直到无序序列中没有数据。
4、希尔排序:先将整个待排序列分割成若干子序列分别进行直接插入排序,然后依次缩减增量再进行直接插入排序,待整个序列中的数据基本有序时,再对全体序列进行一次直接插入排序(增量为1)。
5、堆排序:将待排序数据构造成一个大顶堆。此时,整个序列的最大值就是堆顶的根结点。将它与序列末尾元素交换,然后将剩余n-1个数据重新构造一个堆,这样就会得到n个元素中的次小值,如此反复执行,直到排序完成。
6、归并排序:假设初始序列有n个数据,可以看作n个有序的子序列,每个子序列长度为1,首先进行两两归并,然后四四归并,然后八八归并,一直下去,直至得到一个长度为n的有序序列为止。
7、快速排序:通过一趟排序将序列划分成两部分,其中一部分所有数据都小于另一部分的数据,再按照此方法继续对这两部分分别进行快速排序,整个排序过程可以递归进行,直到变成有序序列。

优缺点比较:

1、快排的效率最高。但其缺点十分明显:在待排序列基本有序的情况下,会退化成冒泡排序,时间复杂度接近 O(N^2)。
2、希尔排序对增量的选择标准仍然没有较为满意的答案,而增量的选取直接影响排序的效率;
3、在数据规模较大时,归并排序比希尔排序、堆排序速度更快;
4、堆排序在数据规模较小的情况下速度较快,但是随着规模的增大,时间代价也开始和希尔和归并两种排序拉开距离。

适用条件:
(1) n较小,待排序列基本有序时,选择直接插入排序或冒泡排序;
(2)n较小,对稳定性没要求时,用选择排序;
(3)n较大,待排序列随机分布,对稳定性没要求时,用快速排序;
(4)n较大,待排序列基本有序,对稳定性有要求时,在空间允许的情况下,用归并排序;
(5)n较大,待排序列基本有序,对稳定性没要求时,用堆排序;
(6)海量级别的数据,必须按块存放在外存(磁盘)中,用归并排序;;
(7)若待排序的记录的关键字在一个明显有限范围内时,且空间允许是用桶排序。
上面的排序算法,当记录的规模较大时,为避免耗费大量的时间去移动记录,可以用链表作为存储结构。譬如插入排序、归并排序、基数排序都易于在链表上实现,使之减少记录的移动次数。但有的排序方法,如快速排序和堆排序,在链表上却难于实现,在这种情况下,可以提取关键字建立索引表,然后对索引表进行排序。

二、查找算法性能总结

数据结构与算法面试题(一)_第2张图片
查找算法比较

三、解释平衡二叉树,以及在数据结构中的应用(红黑树)

Q1:平衡二叉树是一种二叉排序树,其中每个节点的左子树和右子树的高度差至多等于1.
Q2:可以用于查找数据,时间复杂度为O(logN)。但是,由于插入或者删除一个节点需要扫描两趟树,一次需要寻找插入点,一次需要向上平衡树,效率不高(不如红黑树效率高)。
补充:
AVL树,平衡二叉树。适合增删少,查找多的场景。
红黑树,近似的平衡二叉树,能够以O(log2 n)的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。适合插入删除次数多,查找次数也多的场景。
在数据结构中的应用:java中的TreeMap和TreeSet
1)插入删除查找效率高:能够以O(log2 N) 的时间复杂度进行搜索、插入、删除操作
2)
有序
:TreeMap 中的所有元素总是按 key 根据指定排序规则保持有序状态,TreeSet 中所有元素总是根据指定排序规则保持有序状态(TreeSet 底层是通过 TreeMap 来实现的)。
B树,B+树:多路查找树,一般用于磁盘存储,分支多,层数少,有效减少了磁盘的I/O操作次数,有效减少了数据查找的时间。
红黑树与AVL树的比较

四、快排的时间复杂度和空间复杂度。

时间复杂度:
快速排序的平均时间复杂度也是:O(nlogn)。
最优的情况下时间复杂度为:O( nlogn )。
最差的情况就是每一次取到的元素就是数组中最小/最大的,这种情况其实就是冒泡排序了(每一次都排好一个元素的顺序),时间复杂度为:O( n^2 )。
2)空间复杂度:
就地快速排序:O(1)
递归实现快速排序
因为每次递归就要保持一些数据;
最优的情况下空间复杂度为:O(logn) ;每一次都平分数组的情况
最差的情况下空间复杂度为:O( n );退化为冒泡排序的情况

五、解释深度优先搜索和广度优先搜索

你可能感兴趣的:(数据结构与算法面试题(一))