zoukankan      html  css  js  c++  java
  • 数据结构——排序

    1、基本概念
    排序(Sort)是将无序的记录序列(或称文件)调整成有序的序列。
    a、稳定排序和非稳定排序
    设文件f=(R1……Ri……Rj……Rn)中记录Ri、Rj(i≠j,i、j=1……n)的key相等,即Ki=Kj。若在排序前Ri领先于Rj,排序后Ri仍领先于Rj,则称这种排序是稳定的,其含义是它没有破坏原本已有序的次序。反之,若排序后Ri与Rj的次序有可能颠倒,则这种排序是非稳定的,即它有可能破坏了原本已有序记录的次序
    b、内排序和外排序
    若待排文件f在计算机的内存储器中,且排序过程也在内存中进行,称这种排序为内排序。内排序速度快,但由于内存容量一般很小,文件的长度(记录个数)n受到一定限制。若排序中的文件存入外存储器,排序过程借助于内外存数据交换(或归并)来完成,则称这种排序为外排序。我们重点讨论内排序的一些方法、算法以及时间复杂度的分析。

    2、排序方法分类
    各种内排序方法可归纳为以下五类:插入排序、交换排序、选择排序、归并排序、基数排序。

    3、直接插入排序算法的分析及实现
    排序方法:
    先将文件中的(R1)看成只含一个记录的有序子文件,然后从R2起,逐个将R2至Rn按key插入到当前有序子文件中,最后得到一个有序的文件。插入的过程上是一个key的比较过程,即每插入一个记录时,将其key与当前有序子表中的key进行比较,找到待插入记录的位置后,将其插入即可。另外,假定排序后的文件按递增次序排列(以下同)。

    4、Shell排序算法的分析及实现
    排序方法:
    Shell(希尔)排序又称“缩小增量”排序,1959年由D.L.Shell提出。希尔发现:直接插入排序中,key比较次数及记录移动次数会比较大,若将待排序文件按某种次序分隔成若干个子文件,对各子文件“跳跃”式的排序,然后调整子文件个数,逐步对原文件排序,这样总的key比较次数尤其是记录移动次数也许会大大降低。
    设待排文件f=(R1 R2……Rn),先将f中相隔增量d(如令d=n/2)的记录组成一个个子文件,对各子文件插入排序;然后缩小增量d(如令d=d/2),再将相隔新增量的记录组成一个个子文件,对诸子文件排序,……,直到增量d=1为止,排序完毕。这是一种跳跃式的排序方法,它使得文件逐步有序,从而克服了一次排序时记录成片移动现象。

    5、冒泡排序算法的分析及实现
    排序方法:
    a、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
    b、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
    c、针对所有的元素重复以上的步骤,除了最后一个。
    d、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

    6、冒泡排序算法的分析及实现
    排序方法:
    经过key的一趟比较后,确定某个记录在排序后的最终位置。
    a、设待排文件的key集合k={k1 k2……ki……kj……kn-1 kn},对k中的k1,称作枢轴(Pirot)或基准。
    b、逆序比较:k1~kn,若k1≤kn,则k1不可能在kn位置,k1~kn-1,……直到有个kj,使得k1>kj,则k1有可能落在kj位置,将kj->k1位置,即key比基准(k1)小的记录向左移。
    c、正序比较:k1~k2,若k1>k2,则k1不可能在k2位置,k1~k3,……直到有个ki,使得k1<ki,则k1有可能落在ki位置,将ki->kj位置(原kj已送走),即key比基准大的记录向右移。
    d、反复逆序、正序比较,当i=j时,i位置就是基准k1的最终落脚点(因为比基准小的key统统在其“左部”,比基准大的统统在其“右部”,作为基准的key自然落在排序后的最终位置上),并且k1将原文件分成了两部分:对k’和k”,套用上述排序过程(可递归),直到每个子表只含有一项时,排序完毕。

  • 相关阅读:
    使用 matlab 数据集的生成(generate datasets)
    从 RNN 到 LSTM (Short-Term Memory)
    从 RNN 到 LSTM (Short-Term Memory)
    OpenGL(二十二) gluBuild2DMipmaps 加载Mip纹理贴图
    概念的图解 —— 物理
    python数据库做成邮箱的注册系统!
    [每日一题] OCP1z0-047 :2013-08-15 描述GROUPING 函数 .......................................43
    OpenSSL之PKey的EVP封装
    最长回文字符串(manacher算法)
    POJ burnside&&polya整理练习
  • 原文地址:https://www.cnblogs.com/sanwumanzi/p/10561728.html
Copyright © 2011-2022 走看看