排序 和 查找
一.排序
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表