美文网首页
排序与查找

排序与查找

作者: aaa小菜鸡 | 来源:发表于2018-11-26 10:35 被阅读0次

参考:
程序员必知8大排序3大查找(一)
程序员必知8大排序3大查找(二)
程序员必知8大排序3大查找(三)
图解排序算法(一)之3种简单排序(选择,冒泡,直接插入)
图解排序算法(二)之希尔排序
图解排序算法(三)之堆排序
图解排序算法(四)之归并排序
常见排序算法C++总结
稳定排序和不稳定排序的区别和代表


目录:
1 排序
1.1 插入排序:直接插入排序、shell希尔排序
1.2 选择排序:简单选择排序、堆排序
1.3 交换排序:冒泡排序、快速排序
1.4 归并排序
1.5 基数排序
1.6 外部排序
2 查找


1 排序

1.1 插入排序
  1. 直接插入排序
  • 基本思想:
    每一步,将待排序元素从后往前插入到前面已排好的有序序列中,直到所有元素都已插入。
  • 图解:
  • 代码实现:

  • 复杂度:
    最好情况:已正序排好,2 ~ n位与前一项相比一次,n-1,O(n)。
    最差情况:倒序,2 ~ n位与前面比较1 ~ n-1次,(n-1)(1+n-1)/2,O(n^2)。
    平均情况:趋向于差的情况,O(n^2)。
  • 稳定性:稳定
    遇到一样的数不交换。
  1. Shell希尔排序
  • 基本思想:
    选择初始增量=length/2,每步增量=上一步的增量/2。直到增量=1的组排序完。
    每一步,将组内元素做直接插入排序。
  • 图解:
  • 代码实现:

  • 复杂度:
  • 稳定性:不稳定
    例:2 2 1 4,第一步中,第一个2与1交换,到了第二个2后面。
1.2 选择排序
  1. 简单选择排序
  • 基本思想:
    每一步,从待排元素中选择最大(/最小)的元素与首元素交换,直到所有元素都被选择。
  • 图解:
  • 代码实现:

  • 复杂度:
    所有情况:每一个数被选出来时,都与其他剩下的数比较过。也就是第1 ~ n-1个被选出的数,比较过n-1 ~ 1次,(n-1)(n-1+1)/2,O(n^2)。
  • 稳定性:不稳定
    例:5 8 5 2 9,第一趟中,第一个5会与2交换,到了第二个5后面。
  1. 堆排序
1.3 交换排序
  1. 冒泡排序
  • 基本思想:
    每一趟,从一端起通过两两交换把最大元素冒泡到另一端,直到
  • 图解:
  • 代码实现:

  • 复杂度:
    最好情况:已正序排好,一趟下来如果一次交换都没做,说明已经排好,n-1,O(n)。
    最差情况:倒序,对于第1 ~ n-1大的数,比较n-1 ~ 1次,(n-1)(n-1+1)/2,O(n^2)。
    平均情况:趋向于差的情况,O(n^2)。
  • 稳定性:稳定
    遇到一样的数不交换。
  1. 快速排序
  • 基本思想:
    每一趟,以这一组的第一个数为基准,与其他数(看图)比较并交换。
    一趟后的结果:大小完全被基准数划分开。
  • 图解:
  • 复杂度:快排及时间复杂度简单证明
    最好情况:乱,每次的基准数都是这一组的中间数,这样每次都分成两半,O(nlogn)。
    最差情况:已排好序,每次的基准数都是这一组最边缘的数,这样每次都不能分成两半,O(n^2)。
    平均情况:趋向于好的情况,O(nlogn)。
  • 稳定性:不稳定
    例:5 3 3 4 3 8 9 10 11,5与后面的3交换。
1.4 归并排序
  • 基本思想:
    分而治之,递归/迭代。
  • 图解:
  • 代码实现:

  • 复杂度:
  • 稳定性:
1.5 基数排序
  • 基本思想:
    将所有待比较正整数统一为同一数位长度,从最低位开始依次排序。
  • 图解:
  • 代码实现:

  • 复杂度:
  • 稳定性:稳定
    遇到一样的数不交换。
1.6 外部排序

2 查找

[Data Structure & Algorithm] 七大查找算法

相关文章

  • 18-04-27  python3 算法笔记 003查找与排序

    查找: 顺序查找 二分查找 hash查找 排序: 冒泡排序 选择排序 插入排序希尔排序 归并排序 快速...

  • 排序算法的基本操作:两两交换数组中元素

    查找 vs 排序 比较查找与排序算法 说起来查找算法和排序算法从功能到使用目的都大有不同,但其实我们将要学习的(比...

  • 排序与查找

    参考:程序员必知8大排序3大查找(一)程序员必知8大排序3大查找(二)程序员必知8大排序3大查找(三)图解排序算法...

  • 排序与查找

    1、顺序查找的思想: 将待查找的关键字为key的元素从头到尾与表中元素进行比较,如果中间存在关键字为key的元素,...

  • 2.4.2 查找和排序

    排序 复习1:冒泡排序 复习2:快速排序 查找 1)顺序查找2)二分查找 3)哈希表查找4)二叉排序树查找

  • java (查找和排序)

    1.查找 递归形式: 二分查找: 2.排序方式 下面这个表格总结了各种排序算法的复杂度与稳定性: 冒泡排序 特点:...

  • 面试知识点

    排序冒泡排序快速排序选择排序插入排序二路归并 查找二分查找 排序和查找的java实现 java语言Java字符串字...

  • 排序查找c++

    排序算法 选择排序 顺序查找 二分查找

  • 剑指Offer.C++.code6-10

    (1)排序和查找是面试考察算法的重点,如二分查找、归并排序、快速排序等;(2)查找:顺序查找、二分查找、哈希表查找...

  • 2.3 二分查找的递归与非递归实现

    Chapter2: 时间复杂度分析、递归、查找与排序 3. 二分查找的递归与非递归实现 二分查找即折半查找,为查找...

网友评论

      本文标题:排序与查找

      本文链接:https://www.haomeiwen.com/subject/qmpvqqtx.html