zoukankan      html  css  js  c++  java
  • 常用算法稳定性分析

    1、稳定性

      ①冒泡排序

        比较是两个相邻的元素比较,交换是两个相邻的元素交换。所以如果两个元素相等,就不用无聊地去交换吧,这样也能减少交换次数。所以冒泡排序是稳定的。

      ②选择排序

        选择排序是每次给第一个位置选第一小的,给第二个位置选第二小的,以此类推.....。所以说两个相等的元素可能因为选择第一个小的就会被打乱顺序。例如5 8 5 2,这四个元素选第一小的2的时候会把5放入放入2的原位置,导致两个5相对顺序变化,所以不稳定。

      ③插入排序

        插入排序是在已经有序的小序列的基础上排序的。排序的规则是:有序小序列后的第一个元素和有序中的最大的比,比他大的直接插入其后,比他小的往前找。相等的话直接插入该元素之后。所以插入排序是稳定的。

      ④快速排序

        快速排序有两个方向,左边的i下标一直往右走,右边的j下标一直往左走。i<=j 交换A[i]和A[j],如果i>j,交换A[j]和枢轴元素,完成一趟快排。不稳定。

      ⑤归并排序

        归并排序是把序列递归地分成短序列,递归出口是短序列只有1个元素(认为直接有序)或者2个序列(1次比较和交换),然后把各个有序的短序列合并成一个有序的长序列,不断合并直到原序列全部排好序。可以发现,在1个或2个元素时,1个元素不会交换,2个元素如果大小相等也没有人故意交换,这不会破坏稳定 性。那么,在短的有序序列合并的过程中,稳定是是否受到破坏?没有,合并过程中我们可以保证如果两个当前元素相等时,我们把处在前面的序列的元素保存在结 果序列的前面,这样就保证了稳定性。所以,归并排序也是稳定的排序算法。

      ⑥基数排序

        稳定。

      ⑦希尔排序

        不稳定。有自己的步长。

      ⑨堆排序

        不稳定。

    参考:https://www.cnblogs.com/sylz/p/5659553.html

  • 相关阅读:
    setlocale
    c++的 程序实体 作用域 名空间 变量生存期概念理解
    本人的Ubuntu 10.04配置清单
    hadoopStreamming 编程 Angels
    级联 mapreduce (Cascading Mapreduce) Angels
    委托
    OPC和XML/SOAP/Web Services
    实例管理2(会话服务)
    实例管理3()
    操作(Operation)
  • 原文地址:https://www.cnblogs.com/shunyu/p/8545570.html
Copyright © 2011-2022 走看看