码迷,mamicode.com
首页 > 编程语言 > 详细

浅谈 各种排序的稳定性

时间:2020-03-26 21:16:16      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:就是   直接   交换   插入   步骤   从后往前   判断   bsp   基础   

前言

本文只是解释为什么该排序稳不稳定,不进行排序的讲解,所以适合有了排序的基础再来浏览

 

稳定性

也就是说一个序列中的相同值,它排序后,它的相同值的顺序不会改变即稳定

 

冒泡(稳定)

冒泡原理遵循大数下沉小数冒泡,思路是每次相邻两个进行交换,因为是每次找到当前最小数然后进行一格一格的移动,因为是一格一格的一道,相同的数字并不会出现后一个数字跳两格的情况跳到前面,只可能是两个数一起前移或者后移,所以该排序是稳定的

 

选择(不稳定)

选择原理和冒泡差不多,但是它省去了相邻交换的这个步骤,直接找到最小的位置,直接换过来,这个的交换移动位置就是跳跃式的,也可能出现两个数,前一个被换到后面去

例子  5 9 5 2     第一个5会与2进行交换,然后就出现了两个相同值出现顺序改变的情况,因为第一个5在移动,而第二个5没有移动,所以就可能出现这种情况,冒泡是整体的移动

 

插入(稳定)

插入就是从后往前一个一个的找,然后找到适合位置就放在这,也是整体往后移,很明显,稳不稳定取决于当前判断是<=还是<,这种人为可以操控的都是稳定的

 

快速排序(不稳定)

快排的话很明显的一个不稳定的地方就是一个指针从前往后,一个指针从后往前,然后后一个指针换到前一个位置,但是这个指针又是往另一方向走的,这就和我们顺序相悖了

例子 2 3 3 3 1 1 1

这样相同的数肯定是以相反的顺序换过去

 

归并(稳定)

归并的核心地方就在于有序归并这块儿,归并的时候是判断两个数的大小然后再放,那么我们只要控制两个相同数都是前一个序列先放那么就能保证稳定性了

 

堆排(不稳定)

这个就比较那个了,一棵树,然后下沉的时候可能是左子树可能是右子树,如果相同值在左子树,然后自己降到右子树那么就不稳定了

例子   3 3 2

         3(1)                           2

       /        \         ->          /      \

 3 (2)         2         3(2)    3(1)

 

浅谈 各种排序的稳定性

标签:就是   直接   交换   插入   步骤   从后往前   判断   bsp   基础   

原文地址:https://www.cnblogs.com/Lis-/p/12577243.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!