zoukankan      html  css  js  c++  java
  • 排序 和 查找

    一.排序

    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表

  • 相关阅读:
    Javascript作用域研究(with)
    Javascript判断object还是list/array的类型(包含javascript的数据类型研究)
    Javascript两个感叹号的用法(!!)
    Javascript中两个等于号和三个等于号的区别(==/===)
    IIS配置MP3/MP4/OGG/flv等资源文件访问
    生成GUID唯一值的方法汇总(dotnet/javascript/sqlserver)
    记录一次:微信支付申请时,网站不通过/统一驳回的问题解决方法
    C# 扩展系统类方法
    Javascript获取div真实高度
    Jquery获取offsetHeight
  • 原文地址:https://www.cnblogs.com/wukuaiqian/p/7771317.html
Copyright © 2011-2022 走看看