zoukankan      html  css  js  c++  java
  • 排序算法基本思想

    内部排序:全部待排序记录都可以同时调入内存进行的排序。

     
    外部排序:待排序记录的数量太大,以致无法将其同时调入内存,尚需访问外存的排序过程。
     
    排序中的基本操作:
    1. 比较关键字大小  (对大多数排序算法是必须的)
    2. 移动记录  (可通过改变记录的存储方式避免)
     
    待排序记录的存储方式:
    1. 存储在地址连续的一组存储单元中,记录之间的次序由存储位置决定,排序必须移动记录;
    2. 存在静态链表中,记录之间的次序关系由指针指示,排序不同移动记录,仅需修改指针;(链表排序)
    3. 待排序记录本身存储在一组地址连续的存储单元内,同时附设一个指示记录存储位置的地址向量,排序过程中不移动记录,而移动指向向量中这些记录的地址,在排序结束后,再按照地址向量中的值调整记录的存储位置。(地址排序)
     
    内部排序算法按依据的原则不同分类:
    插入排序、交换排序、归并排序、选择排序、基数排序
     
    排序算法的评价标准:
    1. 时间开销 (最重要的开销,可以用比较和移动次数衡量)
    2. 附加空间
     
     
     
     
     
      排序方法 平均时间复杂度 最好情况时间复杂度 最坏情况时间复杂度 空间复杂度 稳定性
    插入排序 直接插入 O(n2) O(n) O(n2) O(1) 稳定
    折半插入 O(n2)     O(1) 稳定
    希尔排序 O(n1.3)     O(1) 不稳定
    交换排序 冒泡排序 O(n2) O(n) O(n2) O(1) 稳定
    快速排序 O(nlogn)   O(n2) O(logn) 不稳定
    选择排序 简单选择排序 O(n2)     O(1) 稳定
    堆排序 O(nlogn)     O(1) 不稳定
    归并排序 2-路归并 O(nlogn)     O(n) 稳定

    基数排序是稳定的内排方法,所有时间复杂度为O(N2)的简单排序算法也是稳定的,而快排、堆排序和希尔排序等时间性能较好的排序算法是不稳定的。堆排序是一种不稳定的排序算法。

     
  • 相关阅读:
    24、面向对象(内置方法)
    23、面向对象(包装)
    22、面向对象(反射)
    21、面向对象(封装)
    20、面向对象(多态)
    19、面向对象(继承)
    18、面向对象(静态属性、类方法、静态方法)
    LeetCode 3. Longest Substring Without Repeating Characters
    LeetCode 2.Add Two Numbers
    LeetCode 1. Two Sum
  • 原文地址:https://www.cnblogs.com/happygirl-zjj/p/4583334.html
Copyright © 2011-2022 走看看