排序算法

排序算法(规模为n):
冒泡:每一轮相邻元素比较,大的后撤,小的往前,得到最大的在末尾(或者最小的在最前 头),重复n-1轮就OK了。
插入:一个一个来,来一个,排一次。
快排:取一个元素a,然后头指针指向头,尾指针指向尾,从头找到一个比a大的,从尾找到一个 比a小的,交换位置,直到头指针越过了尾指针。这是一轮划分,然后划分的两组继续这 个方法,直到只剩两个。(分治思想)
选择:找到最小/大的,放到它应该去的地方。
希尔:改进的插排。步长不一样,最后步长一定是1,即普通的插排。好处是已经大致有序了。所 以算法快了一些。
归并:两组有序的数归并。用两个指针。

堆排:最大/小堆的构建是关键。构造好了之后,去掉堆顶元素(最值),将堆的最后一个元素放到堆顶,调用堆排序函数(同时又调用了堆构造函数)重新构造堆,继续...


从上可以看出:

冒泡,插入是相邻比较和移动,跳动不大,是稳定的;

选择不是相邻,当确定最值时,直接飞跃,所以不稳定;

快排也不是相邻,也是飞跃型,故不稳定;

希尔虽然是插排,但是由于步长不是1,也不是相邻,所以也不稳定;

归并不知道算不算稳定的,可能是吧;

堆排肯定不是稳定的,比如:3 27 36 27,
如果堆顶3先输出,则,第三层的27(最后一个27)跑到堆顶,然后堆稳定,继续输出堆顶,是刚才那个27,这样说明后面的27先于第二个位置的27输出,不稳定。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值