zoukankan      html  css  js  c++  java
  • 排序相关

    有哪些存储结构

    • 随机存取,既可以随意直接存储任何一个元素,可以通过下表直接存取任何一个元素入数组等。
    • 顺序存储,就是只能从前往后逐个访问,像这种链表结构,不能直接通过下标访问,就必须从头开始访问,向后逐个搜索。
    • 索引存取是指为某个关键字建立索引表,从所有的表中得到地址,在直接访问。索引存储多用在数据管理过程中。
    • 散列存储时建立散列表,它相当于一种索引。

    排序的稳定性

    当待排序的关键字均不相同时,排序结果时唯一的,否则排序结果不唯一。若具有相同关键字的稳定性时针对所有输入的实例而言的,即在所有可能的输入实例中,只要有一个实例使得算法不满足稳定性要求,则该算法就是不稳定的。
    稳定的排序入下表所示。

    稳定的排序 时间复杂度 空间复杂度
    气泡排序 最差/平均都是O(n^2),最好时O(n) 1
    鸡尾酒排序 最差/平均都是O(n^2),最好时O(n) 1
    插入排序 最差/平均都是O(n^2),最好时O(n) 1
    归并排序 最差/平均/最好都是O(nlogn) O(n)
    桶排序 O(n) O(k)
    基数排序 O(dn) O(n)
    二叉树排序 O(n log n) O(n)
    图书排序 O(n log n) (1+kc)n

    不稳定的排序如下表所示:

    不稳定的排序 时间复杂度 空间复杂度
    选择排序 最差平均都是O(n^2) 1
    希尔排序 O(n log n) 1
    堆排序 最差/平均/最好都是O(n log n) 1
    快速排序 平均时O(n log n),最坏是O(n^2) O(log n)

    排序方法的分类

    (1)按是否设计数据的内、外存交换分
    在排序过程中,若整个文件都放在内存中处理,排序时不涉及数据的内、外存交换,称之内部排序;反之,若排序过程中要进行数据的内、外存交换,则称之为外部排序。
    注意:

    1. 内排序适用于记录个数不是很多的小文件;
    2. 外排序则适用于记录个数太多,不能一次将其全部记录放入内存的大文件;

    (2)按照策略划分内部排序方法。
    可以分为五类:插入排序、选择排序、交换排序、归并排序和分配排序。

    按照平均时间排序分为四类

    (1)平方阶:直接插入排序、直接选择排序和冒泡排序。
    (2)线性对数阶:快速、堆和归并排序。
    (3)O(n^1+kc):希尔排序
    (4)线性阶排序:桶排序、箱排序和基数排序。

    简单排序中直接插入最好,快读排序最快,当文件为正序时,直接插入排序和冒泡排序均最佳。

    快速排序时目前基于比较的内部排序中被认为时最好的犯法噶,宕待排序的关键字时随机分布时,快速排序的平均时间最短。

    堆排序所需要的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。这两种排序都是不稳定的。

    hash记录表和位置表的对应方法

    1. 直接定址法
    2. 数字分析法
    3. 平方取中法
    4. 折叠法
    5. 取余法
    6. 随机数法

  • 相关阅读:
    国内比较优秀的.net论坛源代码收集 [转]
    WEB项目的分拆和布署[转载]
    采用XHTML和CSS设计可重用可换肤的WEB站点
    定时提醒小程序:VBScript
    小集正则表达式
    OO的设计原则
    在.Net内部, 异步委托是如何使用多线程功能的?
    Asp.net工作流程
    漫谈面向对象基石之开闭原则(OCP)(转)
    SQL Server 2008事务日志的[RowLog Contents 0] 字段没人能解析出来?
  • 原文地址:https://www.cnblogs.com/shugen/p/6862972.html
Copyright © 2011-2022 走看看