排序 和 查找

一.排序

1.冒泡排序(属于交换排序):O(n*n)

自上而下的对相邻的数依次比较,让较大的往下沉,较小的往上冒,当发现两个相邻的不符合时,将他们交换。

2.快速排序(属于交换排序):O(n*lgn)

选择一个基准元素,通常第一个或最后一个,通过一趟排序将记录分成两部分,一部分记录的元素值都比它大,另一部分都比它小,这样,基准元素就在正确的位置。再分别对两部分递归排序。

3.简单选择排序(选择排序):O(n*n)

在一组数中选择最大的一组和第1个位置交换,然后从2个位置开始,选择剩余数中最大的和第二个位置交换,依次类推。

4.堆排序(选择排序):O(n*lgn)

堆是一颗完全二叉树,初始时把要排序的数组看成一棵顺序存储的二叉树(一维数组存储二叉树),调整他们的顺序,使之成为一个堆,将堆顶元素输出,得到最大的元素,然后对剩下的 n - 1 个元素依次类推。

5.直接插入排序(插入排序):O(n*n)

把第一个元素看成是有序的,然后将第二个数插入到一个有序的数组中,依次递归。(重点:设立哨兵,作为临时存储和判断临时数组边界)。

6.希尔排序(插入排序):O(n*lgn)

先将整个待排数组分为若干子序列,对子序列进行直接插入排序,待整个数组基本有序后,再对整个数组进行直接插入排序。

二.查找

1.顺序查找(适合顺序存储或链表):O(n)

遍历整个表与待查元素比较

2.二分查找(元素必须有序):O(lgn)

将待查元素与列表中间元素比较,若比中间元素大,则在后半段中递归查找,若比中间元素小,则在前半段递归查找,若相等,则他就是结果。

3.插值查找(二分查找的优化,比较值不选中间元素,而是mid=low+(key-a[low])/(a[high]-a[low])*(high-low)):O(lg(lgn))

4.斐波那契查找(二分查找的优化,比较值选择黄金比例):O(lgn)

5.数表查找:O(lgn)

先对待查数据生成二叉排序树,然后查找

6.分块查找

把待查数组分块,并且每块有一个索引

7.哈希查找

建立hash表

原文地址:https://www.cnblogs.com/wukuaiqian/p/7771317.html