zoukankan      html  css  js  c++  java
  • 关于排序算法的稳定性————数据结构课程

    排序算法的稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。

             对于不稳定的排序算法,只要举出一个实例,即可说明它的不稳定性;而对于稳定的排序算法,必须对算法进行分析从而得到稳定的特性。需要注意的是,排序算法是否为稳定的是由具体算法决定的,不稳定的算法在某种条件下可以变为稳定的算法,而稳定的算法在某种条件下也可以变为不稳定的算法。

    对于希尔排序的不稳定性:一直没搞明白其不稳定的原因,今天突然想明白了,因为虽然每一组内的排序不会改变相同关键字的相对位置,但是当相同关键字在不同的分组中的时候,其相对位置就可能发生改变。

        举个例子1 3 2 2。gap=2时, 1 3 2 2分组如图所示,蓝色一组,绿色一组,两个2虽然关键字相同但是被分到了不同的分组当中,每个分组内进行排序, 1 2 2 3,绿色分组排序不变,而蓝色分组中2和3交换顺序,这就导致蓝色的2被排到绿色2的前面,从而改变了两个2的相对顺序。

    一般认为稳定的算法:冒泡排序,直接插入,归并排序等

    一般认为不稳定的算法:快速排序(基准元素与最后的i会发生交换),希尔排序(不同分组中相同元素会改变相对顺序),堆排序等

  • 相关阅读:
    Spring--之旅
    体验 Windows 系统 CVM
    基于 CentOS 搭建 WordPress 个人博客
    Codeforces Round #316 (Div. 2)
    BZOJ 1048 [HAOI2007]分割矩阵
    BZOJ 1047 [HAOI2007]理想的正方形
    BZOJ 1045 [HAOI2008] 糖果传递
    BZOJ 1042 [HAOI2008]硬币购物
    BZOJ 1030 [JSOI2007]文本生成器
    BZOJ 第二波刷题开始喽
  • 原文地址:https://www.cnblogs.com/CLGYPYJ/p/15692838.html
Copyright © 2011-2022 走看看