温故而知新,可以为师矣,回忆一下排序的思路

排序虽然学过,也用自己的代码去实践了,但是 一不用就会忘记,现在已经忘记的差不多了,需要温故而知新一下

 

排序:

  简单的:

      1.插入排序

           将之前的队列看成是有序的,然后将当前的数,插入到之前的有序序列合适的位置上

           如  1,2,8, (待插入)5,8,6   -------> 将待插入的5 应该放到 8之前,8往后移

 

      2.冒泡排序

          冒泡真的跟冒泡泡一样,只不过每次只冒一个泡泡,就是每次可以出现一个最大值,

          冒泡就是,比较当前 左右两个数 谁大,如果前的大,就前后交换,这样一趟下来,最后一个数一定是最大的,这就是那个泡泡

       如 6,8,7  ------------》 8比7 大 交换 8,7  变成 7,8,   那8是不是冒出来了

 

    3.希尔排序

       发明人叫希尔,所以叫希尔排序,希尔是对插入的改进,他是相当于 有组的概念,取某个间隔(你可以随意去),然后让 间隔 的数 作为一组, 对组内进行排序。

     如  我要选间隔为   2

          3,4,6,1,7   --------》   组一: 3,1      ,组二 : 4,7   ,组三 : 6 (什么 只有一个,没关系,数组越少,我都不用排序了)

            然后对组内进行排序:  抱歉,只有组1 是乱序, 将组一排序   3,1----》  1,3

     如果我在减少间隔  为1 

        是不是 这些数都是一组了,就是简单插入排序了, 但是分组的作用还是很关键,可以更多的减少逆序(就是 8,7 大数8,在7的前面,不是我们想要的结果),经过 其他间隔的调整,在进行间隔为1的时候,那就交换 的操作就会少很多,这就是希尔对简单插入的改进之处

 

 

好玩的:

     快速排序(没听过把,慌不慌? 快速的来源是因为  他被发明时,比起他的对手,简直太快了,他的对手忘记了。。)

         快速排序,其中有一种思想很屌,那就是拆分,每次可以确定一个数的最终位置

        随便 你选一个数,作为分界值(可以选头头的那个位置的值),将数组 按照 你选出来的值,小于他的 放在前面,大于他的放在他的后面,

       例如:     3,5,6,7,9,7,     我选3 作为分界线的值,煞笔吧 那还用排什么,比他大的不都在右边了么,换一个,我选7       

       那 按照这个分界线 ,结果变成 -------->    3,5,6,7,7,9     这样 小于7的都在左边,大于7的都在右边,这样可以确定出一个7的最总位置

      编码实现这样的 分界线 方法有:   挖坑法,指针法

        已7 为界,可以分为 左边屁股,和右边屁股, 再把左边,跟上述一样,在进行 找个分界线,排序,右边同理

  所以快速好玩在,可以分     ,每次分两办    2^n = 总数  想要知道 分了多少次  n = long2(总数);当然也踏实不稳定的,可能在交换的时候被交换了,也可能存在最坏的情况 n^n ,每次只能确定一个 数的位置

  

归并排序:

     这个呢,也同样跟快速类似,将 数组 分成两半,直到数组的长度为1, 然后在合并两个数组,让他们称为一个有序的数组,

    如  {2},{1} --> 合并   {1,2};            拆的过程   {1,2,4,6} --》{1,2},{4,,6}--》{1},{2},{4},{6} 

    在进行合并,时间复杂度 固定 nlong2(n);

 

 

 具体分类 可以参考 者篇博客()十大经典排序

 

 

              

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值