排序算法汇总

前言    

     学了数据结构几年了,回头看看数据结构里基础算法,都忘光了...

     昨天,舍友去腾讯搜索部门面试,一面二面全是算法,虽然不尽是数据结构基础算法,却也以此为基础,一番讨论之后,发现自己只能说出一些算法的大概,不能给出细节内容,遂感悲催!期间讨论了快速排序的性能提高的随机算法,并利用它选择中位数,使得时间复杂度为O(n),我以前写过这个算法,却怎么也记不起细节...

     今天,重温所有排序算法,慰藉吾心!!程序员伤不起啊伤不起!!

  排序算法     

     常见排序算法有简单排序(直接插入排序、冒泡排序、简单选择排序),希尔排序,快速排序,堆排序,基数排序等几种,时间复杂度可以总结如下:

    

  简单排序

    需要一个辅助空间,时间复杂度皆为O(n*n)

  

  希尔排序

      基本思想:先将整个待排序序列分割成若干子序列,再分别进行直接插入排序,待整个序列基本有序时在对整体进行一次直接插入排序。

 快速排序

     快速排序是对冒泡排序的改进,基本思想是通过一趟排序将待排记录分成两个独立的部分,其中一部分的记录都小于哨兵位的数值,另一部分都大于哨兵位的值,然后继续对两部分分别快速排序。可见快速排序的关键在于寻找哨兵位

 堆排序

     堆排序的关键是对记录所对应的完全二叉树进行调堆操作。需要解决的两个问题是:(1) 如何由一个无序序列建立一个堆 (2)如何在输出堆顶元素后调整剩余元素形成一个新的堆。过程示例如下:

    

 

  归并排序

     基本思想:将两个或两个以上的有序表组合成一个新的有序表

参考

     [1]  算法导论第二部分

     [2]  数据结构,严蔚敏

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值