查找与排序(Find & Sort)

查找

一、顺序查找:从线性表的第一个元素开始,逐个将线性表的元素与被查元素比较。在平均情况下,大约需要比较n/2

特殊情况
线性表是无序表,不管是顺序存储结构还是链式存储结构,都只能用顺序查找
线性表是有序的,如果采用链式存储结构,只能用顺序查找

二、二分法查找

  • 线性表条件:
    ①用顺序存储结构
    ②线性表是有序表(元素按非递减排列);

与中间项比较。最多比log2(n)次

排序

排序:将一个无序序列整理为按值非递减顺序排序的一种方式
逆序:序列中,如果某个元素其后存在一个元素小于它,则称存在一个逆序

1.交换类排序法

①冒泡排序法

  • 基本思想:通过两两相邻数据元素之间的比较交换,不断地消除逆序(最多比较次数:n(n-1)/2

②快速排序

  • 基本思想:取一个元素K(通常第一个),以K作为分割标准,把小于(大于)K的元素移在K的前面(后面)。于是,线性表分割为两个子表,再对俩个子表分别重复以上操作,直到分割的子表长度为1

最多比较次数:n(n-1)/2,但实际情况下排序效率要比冒泡排序高很

2、插入类排序法
插入排序:按元素值的大小已排好的子表中的适当位置,直到全部元素插入完成为止

①简单插入排序

  • 基本思想:把n个元素看成是一个有序表和一个无序表。开始,有序表里只有一个元素,无序表里有n-1个;取无序表的第一个元素插入有序表的恰当位置,生成新的有序表。(最多比较次数:n(n-1)/2

插入元素时,插入位置及其后的记录依次往后移动,最终使有序表的长度为n,无序为0

②希尔排序

  • 基本思想:先取一个增量d1,把全部数据元素分为d1组,所有距离为d1倍数的元素在一组,形成一个子序列,对每个子序列进行简单插入排序。然后取d2(,对整个新序列重复上述操作,直至di=1(即所有记录在一组)

查找与排序(Find & Sort)_第1张图片

排序效率与所选的增量序列有关(最多比较次数:n^r(1< r <2)

三、选择类排序法
选择排序:通过每一趟从排序序列中选出最小的元素,顺序放在一排好的有序子表的后面

①简单选择排序

  • 基本思想:先从所有待排序的数据元素中选择最小的元素,将该元素与第一个元素交换,再从剩下的n-1个元素里选择最小的元素与第二个元素交换。重复上述操作直至所有元素有序为止。(最多比较次数:n(n-1)/2

②堆排序法
若有n个元素的序列(h1, h2,...., hn),将元素按顺序组成一棵完全二叉树,当且仅当满足下列条件(下面两个灰条)的称为堆。
分类:
①大根堆:所有节点的值大于或等于左右节点的值

hi ≥ h2i & hi ≤ h2i+1

②小根堆:所有节点的值小于或等于左右节点的值

hi ≤ h2i & hi ≥ h2i+1

(最多比较次数:nlog2(n)

你可能感兴趣的:(数据结构,排序,二分查找,经验分享)