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个元素如果大小相等也没有人故意交换,这不会破坏稳定 性。那么,在短的有序序列合并的过程中,稳定是是否受到破坏?没有,合并过程中我们可以保证如果两个当前元素相等时,我们把处在前面的序列的元素保存在结 果序列的前面,这样就保证了稳定性。所以,归并排序也是稳定的排序算法。

      ⑥基数排序

        稳定。

      ⑦希尔排序

        不稳定。有自己的步长。

      ⑨堆排序

        不稳定。

  • 相关阅读:
    存储过程3前台
    最简单Login程序
    存储过程前台2
    程序员 开发工具箱
    存储过程4前台
    存储过程 insert
    公司网络解决方案
    存储过程前台
    linux常用指令
    ReentrantLock源码解析3优先响应中断的lockInterruptibly
  • 原文地址:https://www.cnblogs.com/sylz/p/5659553.html
Copyright © 2011-2022 走看看