对十大排序算法的理解与部分代码实现

一、冒泡排序

说到排序算法,最先令人想到的是最简单的冒泡排序(小到大的顺序)。其原理为:从头开始,遍历当前元素和后一个元素,如果后一个比当前小,则交换,一轮遍历下来会将最大的元素置于最末尾(叫冒泡就很形象),长度为n 数组需要遍历n-1次,两个for 循环控制即可!时间复杂度为O(n^2)

 

 二、快排

快排的核心思想就是,一次遍历(一次排序)使得前半部分个数 均小于中间数,后半部分数均大于中间数,中间数一般选择最后一个数。然后对前半部分与后半部分递归使用排序函数,达到最终的排序目标,快排的时间复杂度为O(nlogn)- O(n^2)

 理解三个while ,就是理解了快排的核心

三、归并

归并的核心思想就是分割然后排序(分冶的思想):

 merge_sort 为分割函数,不断的平均分割然后用merge 函数实现融合(merge 函数的实现思路不难,但要注意其实现过程)!时间复杂度为O(nlogn)

四、插入排序

和冒泡排序很像,从第二个元素开始,当前元素与前一个元素比较,小则交换,大则不变,依次下去直到最后一个元素

五、选择排序

每次在序列中找出最大的元素(max()方法),放在最后面,依次在剩余序列中重复,时间复杂度为O(n^2)

六、希尔排序

和增量序列排序有关,比如增长序列的值选择1,则需要分别排序奇数位置和偶数位置的序列。依次,希尔排序为一种非稳定排序算法

七、堆排序

先将序列化为二叉树,然后如果是最大堆排序则保证父节点值大于孩子值,从下往上确定有序区域

八、桶排序

将序列通过桶函数映射到桶中,桶是有序的,桶中元素再进行排序,最后输出为桶(桶中有序元素)的顺序!桶排序的复杂度取决于桶函数的选择

九、基数排序(LSD、MSD)

就是将排序元素分割成个位、十位、百位等,LSD为先低位排序、MSD为先高位排序

十、计数排序

计数排序为比较排序算法中最快的,如果一个数,在序列中有n个比其小的数,其位置应为n+1,类似于这样。时间复杂度为O(n),但缺点是需要开辟额外的存储空间!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值