zoukankan      html  css  js  c++  java
  • 【C++】查找算法和排序算法

    1. 查找技术

    (1)顺序查找

    查找过程:

    从线性表的第一个元素开始,逐个将线性表中的元素与被查元素进行比较,如果相等,则查找成功;若整个线性扫描结束,仍未找到与被查元素相等的元素,则表示线性表中没有被查元素,查找失败。

    前提要求:

    线性表

    查询次数:

    最少1次,第一个元素就是要查的元素;
    最多n次,最后一个元素才是要查的元素,或者查到最后都没发现要查的元素;
    因此平均情况是n/2次。

    只能顺序查找的情况:

    线性表为无序表;
    采用链式存储结构存储的表

    (2)二分法查找

    查找过程:

    被查元素X
    将X与线性表的中间元素比较,会有3中情况:
    如果与中间项的值相等,则查找成功,结束查找;
    如果X小于中间项的值,则在线性表的前半部分以二分法继续查找;
    如果X大于中间项的值,则在线性表的后半部分以二分法继续查找。

    前提要求:

    1.用顺序存储结构
    2.线性表是有序表,此处“有序”指的是非递减的顺序

    查询次数:

    最少1次,中间项就是被查元素;
    最多是log2(n)次,查到最后刚好找到,或查到最后也没有。

    相比于顺序查找优点:

    顺序查找每一次比较,只能将查找范围减少1,而二分法查找,每比较一次可将查找范围减少为原来的一半,效率大大提高。
    最坏情况的查找次数比顺序查找少。

    2. 排序技术

    (1)交换类排序法

    ① 冒泡排序

    定义逆序:在数据元素的序列中,对于某个元素,如果其后存在一个元素小于它,则称之为存在一个逆序。
    冒泡排序基本思想就是:通过两两相邻数据元素之间的比较和交换,不断消除逆序,直到所有数据元素有序为止。
    最坏情况下,需要比较的次数为n(n-1)/2

    ② 快速排序

    基本思想:在待排序的n个元素中任选一个元素K(通常选第一个元素),以元素K作为分割标准,把所有小于K元素的数据元素都移到K前面,所有大于K的都移到K后面。这样,以K为分界线,把线性表分割为两个子表,这个一次分割的过程又称为“一趟排序”。然后,对K前后的两个字表分别重复上述过程,直到分割的字表的长度为1为止,这时,线性表已经是排好序的了。
    最坏情况下,与冒泡排序一样,也需要比较n(n-1)/2次,但是实际的排序效率比冒泡排序高得多。

    (2)插入类排序法

    ① 简单插入排序

    基本思想:把n个待排序的元素看作是一个有序表和一个无序表,开始时,有序表只包含1个元素,无序表包含n-1个元素,每次取无序表中的第一个元素插入到有序表中的正确位置,使之成为增加一个元素的新的有序表。插入元素时,插入位置及其后的记录依次向后移动。最后有序表长度为n,无序表长度为空,此时排序完成。
    最坏情况下,与交换类排序算法一样,也需要比较n(n-1)/2次

    ② 希尔排序

    我没看明白
    但是希尔排序的效率与所选取的增量序列有关。最坏情况下,需要比较n1~2

    (3)选择类排序法

    ① 简单选择排序法

    基本思想:先从所有n个待排序的元素中选择最小的元素,将该元素与第1个元素交换,再从剩下的n-1个元素中选出最小的元素与第2个元素交换。重复操作直到所有的元素有序为止。
    最坏比较次数,与交换类排序法和插入排序法中的简单插入排序法一样,都为n(n-1)/2。

    ② 堆排序法

    将n个元素组成一棵完全二叉树,当满足一定条件的时候称为堆。
    大根堆,所有节点的值大于或等于左右子节点的值。
    小根堆,所有节点的值小于或等于左右子节点的值。
    最坏比较 nlog2(n)次。

  • 相关阅读:
    (网页)中的简单的遮罩层
    (后端)shiro:Wildcard string cannot be null or empty. Make sure permission strings are properly formatted.
    (网页)jQuery的时间datetime控件在AngularJs中使用实例
    Maven Myeclipse 搭建项目
    MyBatis 环境搭建 (一)
    java 常用方法
    XML 基础
    JS BOM
    js 事件
    js 的使用原则
  • 原文地址:https://www.cnblogs.com/dindin1995/p/13059196.html
Copyright © 2011-2022 走看看