【专题版】前端面试知识点(数据结构)

74 阅读2分钟

数据结构

排序算法

术语介绍

  • 稳定排序:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;
  • 非稳定排序:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;
  • 内排序:所有排序操作都在内存中完成;
  • 外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;
  • 时间复杂度:排序所耗费的时间;
  • 空间复杂度:排序所耗费的内存;
  • 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。
  • 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。

排序介绍

image.png

image.png

总结

  • 时间复杂度(平均):
    • O( n^1.3 ):希尔
    • O( n^2 ):插入、选择、冒泡
    • O( nlog2(n) ):堆、快速、归并
    • O( n + k ):计数、桶
    • O( n * k ):基数排序

冒泡排序

思想:每次寻找一组数据中最大的元素,两两比较,找到后放到数据的最后一位。n个数据第一次两两比较n-1次。第二次比较n-2次,比较的时候如果前一个元素比第二个元素大则相互交换。总共两层循环:第一层代表需对比几轮;第二层代表需要两两对比多少次

优点:比较基础,简单实用易于理解。

缺点:比较次数多,效率较低。

快速排序

思想:先找到一个基准点(一般指数组的中部),然后数组被该基准点分为两部分,依次与该基准点数据比较,如果比它小,放左边;反之,放右边。左右分别用一个空数组去存储比较后的数据。最后递归执行上述操作,直到数组长度 <= 1;

优点:速度快,常用

缺点:需要另外声明两个数组,浪费了内存空间资源

归并排序

思想:排序一个数组,先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了