常见算法面试题

前言

正文

1、解释算法的时间复杂度?

算法的时间复杂度表示程序运行完成所需的总时间,它通常用大O表示法来表示。

2、解释二分法检索如何工作?

在二分法检索中,我们先确定数组的中间位置,然后将要查找的值与数组中间位置的值进行比较,若小于数组中间值,则要查找的值应位于该中间值之前,依此类推,不断缩小查找范围,直至得到最终结果。

代码拓展,二分法查找
def BinarySearch(t,x):
    t.sort() #对列表进行排序,列表是有序的,是二分法的前提
    low = 0;
    high = len(t)-1;
    while low < high:
        mid = (low+high)/2;
        if t[mid]<x:
            low=mid+1;
        elif t[mid]>x:
            high = mid-1;
        else :
            return mid
    return Non

3、解释什么是推排序?

堆排序可以看成是选择排序的改进,它可以定义为基于比较的排序算法。它将其输入划分为未排序和排序的区域,通过不断消除最小元素并将其移动到排序区域来收缩未排序区域。

4、解释什么是快速排序算法?

(1)通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列;

(2)空间复杂度为O(log2n);

(3)时间复杂度比较复杂,最好的情况是O(n),最差的情况是O(n2),所以平时说的O(nlogn),为其平均时间复杂度。

5、解释插入排序算法的空间复杂度是多少?

插入排序是一种就地排序算法,这意味着它不需要额外的或仅需要少量的存储空间。对于插入排序,它只需要将单个列表元素存储在初始数据的外侧,从而使空间复杂度为O(1);

6、解释什么是“哈希算法”,它们用于什么?

“哈希算法”是一个哈希函数,它使用任意长度的字符串,并将其减少为唯一的固定长度字符串。它用于密码有效性、消息和数据完整性以及许多其他加密系统;

7、解释如何查找链表是否有循环?

要知道链表是否有循环,我们将采用两个指针的方法;如果保留两个指针,并且在处理两个节点之后增加一个指针,并且在处理每个节点之后,遇到指针指向同一个节点的情况,这只有在链表有循环时才会发生。

8、解释什么是基数排序算法?

基数排序又称“桶子法”,是通过比较数字将其分配到不同的“桶里”来排序元素的。它是线性排序算法之一。

9、解释什么是递归算法?

递归算法是一个解决复杂问题的方法,将问题分解成较小的子问题,直到分解的足够小,可以轻松解决问题为止。通常,它涉及一个调用自身的函数。

 10、解释什么是冒泡排序算法?

冒泡排序算法也称为下沉排序;在这种类型的排序中,要排序的列表的相邻元素之间互相比较;如果它们按顺序排列错误,将交换值并以正确的顺序排列,直到最终结果“浮”出水面。

11、解释什么是哈希算法?

参考资料

原文地址:https://www.cnblogs.com/haoxinchen/p/11186417.html