• 关于排序算法的稳定性————数据结构课程


    排序算法的稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,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会发生交换),希尔排序(不同分组中相同元素会改变相对顺序),堆排序等

  • 相关阅读:
    程序员必备的代码审查(Code Review)清单
    Laravel 在homestead 平台上命令
    Laravel5.5执行 npm run dev时报错,提示cross-env找不到(not found)的解决办法
    Laravel 的Artisan 命令学习
    github常见操作和常见错误!错误提示:fatal: remote origin already exists.
    Sublime如何设置背景透明
    jquery判断滚动条是否到底部
    mysql的数据恢复
    MySQL体系结构
    mysql-trigger-触发器
  • 原文地址:https://www.cnblogs.com/CLGYPYJ/p/15692838.html
Copyright © 2020-2023  润新知