经典排序算法

这里主要讲的是主要讲的是内排序,可用于面试,装逼。开阔下视野,对编程能力和技巧提升还是很大的。先阶段先不分析时间复杂度和空间复杂度,我也讲不太明白,稳定性也不太懂。本篇博客就是先讲一下概念,后面会仔细讲每一种排序算法的。听说东西可以打赏钱,还没体验过,那个啥..,你懂得

 

 

比较排序:大量的比较,没什么好说的

插入排序:主要采用插入的方式实现。算法起始于这样一种思路,如果有一个长度为n的有序数组a,现在又一个元素要插入到数组a,并使数组a依然是有序的,应该怎么做。

直接插入排序:就是插入排序了啊

希尔排序:直接插入排序的进阶版本,本质意思就是,多次把数组分成多个部分,各部分单独进行直接插入排序,渐渐让数组变最终有序。

简单选择排序:大概思路就是,找出最大的或者最小的值放到前面,然后从剩下的元素找中再找出最大或者最小的放到前面。

堆排序:虽然本质依然是选择排序,但是它借助了完全二叉树的特性,做到了支线有序,大量减少了简单选择排序中找出最大或者最小值的步数。

交换排序:就是不停的交换,让数组变的尽量区域有序,或者是局部趋于有序

冒泡排序:这东西要是都搞不定,那就没啥意思了。就是一趟一趟的是当前元素和下一个元素进行比较,然后根据需要交换位置,这样一趟下来,最后一个元素就会成为一个最大的或者最小的,并且,数组的整体顺序也由所优化。

快速排序:这家伙名声有点高,但其实一点都不难,我的理解就是它和冒泡排序没啥关系。核心概念就是轴。大概意思就是,找一个元素作为轴,然后让大(小)的放到这个轴的前面,小(大)的放到这个轴的后面。然后以这个轴为分界线,前面认为是一个新数组,后面认为是一个新数组,各自再进行一次新的快速排序就可以了。所以这个快速排序有两个部分,一个轴划分,一个递归快速排序。

归并排序:先给大家讲一下算法来源,如果你有两个有序数组,现在让你把这两个数组组成一个新数组,就问你简单不简单,你没听错,这里面提到了新数组,也就是说,它占用的空间多了一个新数组的概念,不过这也没啥,内存空间现在不用太过于在乎,但是空间开辟也是要浪费很多资源的,我不太喜欢这个排序方式。你只要把一个数组分成两个部分,然后两个部分各认为是一个新数组,继续分,继续认为,一直到新数组只有一个元素就OK了。其实还很有用的,比如如果一个数组过长,你可以先按归并排序的概念分一次,新数组可以使用快速排序或者其他排序,然后最后进行合并。

非比较排序:就是不需要进行元素之间的比较

计数排序:也叫箱排序,大概意思就是新建一个数组,这个数组的长度就是要排序数组的最大值和最小值的差值,这个数组元素的下标就代表要排序数组的值,这个数组元素的值就是要排序的那个数组的值为下标的那个值出现了多少次。然后这个数组就能代表要排序的那个数组了。

基数排序:这个方法很特别,后面会讲

 

 

说明:每一个排序都有各自的特色,都很有用。没有最快的排序方式,要根据情况来选择使用。个人感觉,根据场景和容量,混合使用才可以让排序速度变的尽可能的快。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值