vlambda博客
学习文章列表

go-数据结构与算法 复习

https://goa.lenggirl.com/

 

       


https://goa.lenggirl.com/

             

排序算法

  1. 插入类排序有:直接插入排序和希尔排序

  2. 选择类排序有:直接选择排序和堆排序

  3. 交换类排序有:冒泡排序和快速排序

 

它们的复杂度如下:

             

稳定性概念

定义:能保证两个相等的数,经过排序之后,其在序列的前后位置顺序不变。(A1=A2,排序前A1在A2前面,排序后A1还在A2前面)

意义:稳定性本质是维持具有相同属性的数据的插入顺序,如果后面需要使用该插入顺序排序,则稳定性排序可以避免这次排序。

 

冒泡排序可以说是最差的排序算法

我们把冒泡排序,直接选择排序,直接插入排序认为是初级的排序算法,其中直接插入排序的性能是综合最好的,一般来说,当排序数组规模 n 较小时,直接插入排序可能比任何排序算法都要快,建议只在小规模排序中使用。

希尔排序是对直接插入排序的改进版本,比直接选择排序和直接插入排序快,且随着规模的递增,这种性能提升越明显。因为算法容易理解,在排序数组中等规模下,我们可以使用它。在非常大的规模下,它的性能也不那么糟糕,但大规模排序还是建议使用以下的高级排序算法。

快速排序,归并排序和堆排序是比较高级的排序算法

目前被认为综合最好的高级排序算法是快速排序,快速排序的平均用时最短,大多数的编程库内置的排序算法都是它。

堆排序也是一种很快的排序算法,通过维持一棵二叉树,树的根节点总是最大或最小从而可实现排序。

归并排序和快速排序一样使用分治法,递归地先使每个子序列有序,再将两个有序的序列进行合并成一个有序的序列。

 

查找算法

  1. 散列查找:也称哈希查找,有拉链法查找,也有线性探测法查找

拉链法使用数组链表结构,线性探测法使用数组。

  1. 树查找:有搜索二叉树,平衡查找树如:红黑树,B树,AVL树,B+等,使用链表树结构。