排序算法--面试总结分析

来源:互联网 发布:迷宫生成算法 opengl 编辑:程序博客网 时间:2024/06/05 02:29

面试时最常问的就是排序算法,所以总结一下这个过程中我遇到的问题:

  1. 叙述**排序算法思想,然后写代码;最常问的是快排;

  2. 各个排序的时间复杂度,一般情况下都说的是平均。首先还是会问快排,​nlogn,然后问同样复杂度的排序算法,合并排序、堆排序、shell排序。(刚开始的时候一直特别害怕复杂度,因为感觉自己不清楚,面试过程中突然感觉,只要进行了折半,复杂度就是nlogn。所以知道各个排序的思想,还是很好想出来的,不需要死记硬背)

  3. 后来就问合并排序和快排它们处理数据的特征。因为根本没有遇到这样的问题,没有思路,面试完之后百度给出的答案也不满意。接着在其他公司面试中,

    • 面试官问快排最坏情况下复杂度是多少? 答n的平方。
    • 又问:​​最坏是什么情况下。想了一下快排,就是一次排序将基准元素放到相应的位置。然后再左右排。
      • 答:基准元素每次都放到最末尾的时候。面试官听后,说,其实就是有序的情况下。是啊,我怎么没有想到。然后也完美的解决了上述合并排序和快排处理数据特征的问题。如果数据是有序的,用合并,是杂乱的用快排。想想自己好笨呀。
  4. 如果涉及顺序不能改变的,即“一个数组中有字母、数字,处理使数字都在字母的后面,且字母和数字各自按大小排列,且字母和数字的相对顺序和原数组保持不变,且in-place”。关键点,

    • 数字在字母后面,说明数字权重大、字母权重小,且各自排序,则排序。而选用哪种排序呢?
    • 相对位置保持不变 – 则是排序算法必须稳定
    • in-place,则O(1)空间;
    • 根据上述要求,由下表知,则冒泡排序、插入排序、归并排序符合条件。
  5. 故下面总结一个各个排序思想和最好最坏复杂度的情况:

    • 直接插入排序:将待排序的数插入已排好序的数组中。最好:待排序数组已有序;

    • 折半插入排序:将待排序的数折半查找插入排好序的数组中。

    • 冒泡排序:每次迭代将最大元(or最小元)放大上面,改进冒泡(标记最后变动位置),这样最好情况为数组有序。

    • 简单选择排序:每次选出最小or最大的元素放到最右边or最左边。​

    • 快速排序:默认第一个元素为基准元素,将基准元素放到相应的位置(即整个数组排好序时,其应该在的位置。),左侧的均比其小,右侧的均比其大。最坏:数组有序。所以为了避免此类现象,一般选取随机取基准元素。​

    • 堆排序:最小堆,即左右儿子均比父亲大,最大堆反之。

    • 合并排序:将数组折半,然后分别排好,再将排好序的子数组合并。最好:已排好序。

这里写图片描述

引用:http://blog.sina.com.cn/s/blog_77795cad01011txt.html

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一跑步就岔气了怎么办 婴儿关节折邹发红怎么办? 打了借条人跑了怎么办 吃凉的胃不舒服怎么办 跑步机带子跑偏怎么办 在跑步机上摔倒怎么办 弯道以后就是直线行驶怎么办 跑步机的声音大怎么办 科二一直考不过怎么办 考科目三太紧张怎么办 科目三太紧张了怎么办 跑步慢怎么办怎样跑快 铣床铣得不直怎么办 考试的时候检测仪响怎么办 吸入腐蚀性气体导致嗓子疼怎么办 孕妇已做c13检查怎么办 静电除尘器绝缘子箱温度低怎么办 高中三角函数计算总算不对怎么办 江苏高考物理考d怎么办 高二化学学不好怎么办 中考最后一次月考下滑怎么办 物联网卡网速慢怎么办 机械表长时间不带不走了怎么办 高中档案有涂改痕迹怎么办 大学平时成绩为0怎么办 电大英语考试成绩取消了怎么办 网贷评分不足要怎么办 学业水平广东1c怎么办 绣花机速度太慢怎么办 娃脖子有点烂了怎么办 7月省内流量套餐怎么办 qq手游授权失败怎么办 钉钉不够6人创建怎么办 钉钉 不够6个人怎么办 plsql删错了表怎么办 吊兰长出来的茎怎么办 防水台鞋跟太高怎么办 证件照头部比例过大怎么办 特岗照片传错了怎么办 打印报名表照片不显示怎么办 刚买的床有味道怎么办