排序算法(一)基础概览

       排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。总体上说,排序算法有两种设计思路,一种是基于比较,另一种不是基于比较。

 

   稳定性

算法稳定性简单来说,一组带排序的数中,有两个相同的数,假设为31),32)如果排序后31)仍在32)之前,我们称这个排序是稳定的。

 

   分类

插入排序

选择排序

交换排序

归并排序

基数排序

。。。。。。

 


1.交换排序

冒泡排序

特点:稳定排序,原地排序空间复杂度O(1),时间复杂度O(N*N)

思想:将整个序列分为无序和有序两个子序列,不断通过交换较大元素至无序子序列首完成排序。

适用场景:当数据已经基本有序时

快速排序

特点:不稳定排序,原地排序,时间复杂度O(nlog2n)

思想:采用分治策略,将原问题分解成若干个规模更小,但结构与原问题相似的子问题。递归的解决这些子问题,然后将这些子问题的解组合为原问题的解。

适用场景:应用相当广泛

2.选择排序

直接选择

特点:不稳定排序,原地排序空间复杂度O(1),时间复杂度O(n2)

 

思想:将序列划分为无序和有序两个子序列,寻找无序序列中的最小(大)值和无序序列的首元素交换,有序区扩大一个,循环下去,最终完成全部排序。

 

适用场景:交换少

堆排序

特点:非稳定排序,原地排序空间复杂度O(1),时间复杂度O(nlog2n)

思想:小顶堆或者大顶堆

 

适用场景:不如快速排序广泛

3.插入排序

直接插入

特点:稳定排序,原地排序,时间复杂度O(N*N)

 

思想:将所有待排序数据分成两个序列,一个是有序序列S,另一个是待排序序列U,初始时,S为空,U为所有数据组成的数列,然后依次将U中的数据插到有序序列S中,直到U变为空。

 

适用场景:当数据已经基本有序时,采用插入排序可以明显减少数据交换和数据移动次数,进而提升排序效率。适合于链表存储。

希尔排序

特点:非稳定排序,原地排序,时间复杂度O(n^lamda)(1< lamda < 2), lamda和每次步长选择有关。

 

思想:增量缩小排序。先将序列按增量划分为元素个数近似的若干组,使用直接插入排序法对每组进行排序,然后不断缩小增量直至为1,最后使用直接插入排序完成排序。

 

适用场景:因为增量初始值不容易选择,所以该算法不常用。

4.归并排序

特点:稳定排序,非原地排序,时间复杂度O(N*N)

 

思想:首先,将整个序列(共N个元素)看成N个有序子序列,然后依次合并相邻的两个子序列,这样一直下去,直至变成一个整体有序的序列。

 

适用场景:外部排序

5.基数排序

特点:稳定排序,非原地排序,时间复杂度O(N)

 

思想:把每个数据看成d个属性组成,依次按照d个属性对数据排序(每轮排序可采用计数排序),复杂度为O(d*N)

 

适用场景:数据明显有几个关键字或者几个属性组成。

 

 

    以上,是对排序算法的基本介绍,下面会继续深入的介绍。。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 25
    评论
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值