快排优化:举一反三,轻松面对快排面试题

简介: 做一些学习记录

问题一:在一堆无序的数字中查找第 k 位元素

使用快速排序算法:

  • 做了大量的无用操作,这会导致算法效率很低
  • 快速排序算法的时间复杂度不稳定,很有可能退化到最坏的时间复杂度 O(n2)

问题二:有没有不需要排序,且效率更高的做法呢?

快速选择算法解决。

快速选择算法是基于快速排序算法的一种拓展算法,它可以在不对数据整体进行排序的前提下,快速找到排名第 k 位的元素,而且时间复杂度还能优化到 O(n)


问题三:在使用快排的情况下,如何才能让它的时间复杂度大概率稳定在 O(nlogn)?

  • 优化一:单边递归优化
  • void quick_sort(int *arr, int l, int r) {
  •    while (l < r) {
  •        // 进行一轮 partition 操作
  •        // 获得基准值的位置
  •        int ind = partition(arr, l, r);
  •        // 右侧正常调用递归函数
  •        quick_sort(arr, ind + 1, r);
  •        // 用本层处理左侧的排序
  •        r = ind - 1;
  •   }    
  • return ;
  • }
  • 优化二:基准值选取优化
  • 优化三:partition 操作优化

总结:快速选择算法可以用来快速查找一个序列中排名第 k 位的元素;单边递归法可以使快排过程中的递归调用次数减少一半,并且,这种优化方法也可以使用在所有和快速排序类似的程序结构中;三点取中法能帮助我们选出更加合理的基准值,保证快速排序的运行效率;优化 partition 的操作,通过减少程序实现中的比较操作,来提高程序的运行效率。


此文章为3月Day3学习笔记,内容来源于极客时间《常用算法25讲》,强烈推荐该课程!

目录
打赏
0
0
0
0
1
分享
相关文章
Resume Matcher:增加面试机会!开源AI简历优化工具,一键解析简历和职位描述并优化
Resume Matcher 是一款开源AI简历优化工具,通过解析简历和职位描述,提取关键词并计算文本相似性,帮助求职者优化简历内容,提升通过自动化筛选系统(ATS)的概率,增加面试机会。
146 18
Resume Matcher:增加面试机会!开源AI简历优化工具,一键解析简历和职位描述并优化
面试必问的多线程优化技巧与实战
多线程编程是现代软件开发中不可或缺的一部分,特别是在处理高并发场景和优化程序性能时。作为Java开发者,掌握多线程优化技巧不仅能够提升程序的执行效率,还能在面试中脱颖而出。本文将从多线程基础、线程与进程的区别、多线程的优势出发,深入探讨如何避免死锁与竞态条件、线程间的通信机制、线程池的使用优势、线程优化算法与数据结构的选择,以及硬件加速技术。通过多个Java示例,我们将揭示这些技术的底层原理与实现方法。
200 3
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
MySQL慢查询优化、索引优化,是必知必备,大厂面试高频,本文深入详解,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
114 20
Android经典面试题之图片Bitmap怎么做优化
面试官:limit 100w,10为什么慢?如何优化?
面试官:limit 100w,10为什么慢?如何优化?
323 2
面试官:limit 100w,10为什么慢?如何优化?
面试时让你手写一个防抖和节流优化,你能写出来吗?(二)
面试时让你手写一个防抖和节流优化,你能写出来吗?(二)
Java面试题:如何监控和优化JVM的内存使用?详细讲解内存调优的几种方法
Java面试题:如何监控和优化JVM的内存使用?详细讲解内存调优的几种方法
159 3
|
9月前
|
Java面试题:简述数据库性能优化的常见手段,如索引优化、SQL语句优化等。
Java面试题:简述数据库性能优化的常见手段,如索引优化、SQL语句优化等。
380 0
Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
102 0

热门文章

最新文章

相关实验场景

更多