`
ah_fu
  • 浏览: 228022 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

有哪些手段可以优化快速排序算法

阅读更多
    周五的下午面试了一位来自华为的高手,此高手称精通排序算法。我一听说某人精通某项,就忍不住兴奋,喜欢抓住别人最精通的这一项追根究底。一方面来说,问你最精通的东西,不能算考官故意刁难你;另一方面来说,面试别人往往成为自己变相请教高手的途径。
    问之:相对于《数据结构》课本上提供的快速排序算法,有没有可以优化的余地?
   本来我的原意是想听到他说将递归算法修改为非递归算法,可是聊了一些方面也没提高这个。虽然对这个问题的答案有些失望,总的来说这个高手思维积极、善于思考,仍是非常不错的。

    面试完成后,我到网上查了查快速排序的一些资料,发现快速排序算法可优化的地方很多,其实我自己也是半桶水。
    快速排序的优化方法包括:
1、将递归算法修改为非递归算法;
2、需要排序的元素个数如果少于8个,则使用插入排序代替快速排序;
3、使用仿函数(函数对象),而不是函数指针:模版库会将比较函数展开,从而避免函数调用带来的开销;
4、使用多线程:快速排序是分而治之的思想,每个独立的段可以并行进行排序。因此可以利用计算机的并行处理能力来提高排序的性能;

   我所找到的一些参考文章如下:
·深入分析qsort库函数: http://www.programfan.com/blog/blog.asp?blogid=2592
·双核CPU上的快速排序效率:http://blog.csdn.net/drzhouweiming/archive/2006/08/23/1109499.aspx

    抛砖引玉,欢迎朋友提出更多算法优化的思路,谢谢!
 
分享到:
评论

相关推荐

    高维度数据的并行快速排序算法.pptx

    ### 高维度数据的并行快速排序算法 #### 一、并行排序算法简介 **1.1 并行排序算法概述** - **并行排序的概念**:并行排序算法是一种利用多处理器协同工作的算法模式,它通过将排序任务拆分成更小的子任务,并将...

    【智能优化算法-堆优化算法】基于堆优化算法求解单目标优化问题附代码(Heap-BasedOptimizer,HBO).zip

    智能优化算法是现代计算技术中解决复杂优化问题的重要手段,其中堆优化算法(Heap-Based Optimizer,简称HBO)是一种高效、实用的策略。本文将深入探讨堆优化算法的原理,以及如何使用MATLAB实现这一算法来求解单...

    算法领域,快速排序(Quicksort),用于排列数据

    在网络爬虫项目中,为了高效地处理大量数据,也会采用快速排序算法来整理抓取的数据。 #### 六、总结 快速排序是一种高效的排序算法,其核心在于分治的思想。通过合理的选择基准元素和高效的分区操作,可以极大地...

    排序算法演示软件(C语言版)

    根据提供的文件信息,我们可以归纳总结出以下相关的IT知识点: ### 排序算法演示软件(C语言版) #### 概述 ...通过该项目的学习和开发,可以加深对排序算法的理解,并掌握实际编程中的许多技巧。

    数组与排序算法:从基础到进阶

    《数组与排序算法:从基础到进阶》是一本全面深入探讨数组基础知识和各种排序算法的实用指南。...高级技巧:探讨希尔排序、归并排序、快速排序等高级排序算法,以及它们在实际应用中的优势和局限。

    排序算法优化:时间复杂度比较及性能提升技巧.md

    此外,还可以通过适当的优化手段进一步提高算法的性能,比如在快速排序中采用随机选择基准元素的方式避免最坏情况的发生,或者在冒泡排序中加入标志位来减少不必要的比较等。 总之,正确理解时间复杂度的概念,并...

    几个排序算法

    插入排序虽然简单,但在数据量较大时效率较低,但作为基础排序算法,对于小规模数据或作为其他排序算法的辅助手段依然有价值。了解并熟练掌握这些排序算法有助于优化程序性能,为不同的数据结构和问题提供最佳解决...

    排序算法 - Axb的自我修养1

    【排序算法概述】 排序算法是计算机科学中至关重要的一部分,它涉及到如何有效地重新排列一组数据,使其按照特定标准(如升序或...同时,优化排序算法也是提高程序效率的重要手段,例如通过并行化、缓存优化等方法。

    利用线程计算查询和排序算法的时间

    在给定的场景中,我们关注的是如何利用线程来计算不同查询算法(顺序查询和折半查询)以及排序算法(冒泡排序和快速排序)的时间消耗。这个任务有助于理解线程并发执行对性能的影响,以及不同算法的时间复杂度。 ...

    各种排序算法的可视化比较_C++_

    可视化排序算法可以帮助我们直观地看到每一步的变化,增强理解和记忆。通过绘制每个元素的位置和交换过程,可以清楚地看到如何逐步达到排序目标。例如,可以使用二维图形或者动画来表示冒泡排序过程中元素的移动。 ...

    排序算法详解

    排序算法可以按照多种方式进行分类,如稳定性、时间复杂度、空间复杂度等。下面将分别从这几个方面对排序算法进行讨论: ##### 1. 稳定性 稳定性是指相等的元素经过排序后是否能够保持原来的相对位置。具体的分类...

    各种排序算法的C语言实现

    在编程领域,排序算法是计算机科学中的基础但关键的知识点,尤其对于C语言开发者来说,理解和掌握各种排序算法是提高程序效率的重要手段。本资源提供的是C语言实现的各种排序算法,其中包括快速排序(Quick Sort)...

    多维数据排序算法的性能评估.pptx

    - 对于正态分布的数据,各类排序算法的性能差异较小,但快速排序和堆排序略有优势。 - 由于正态分布数据集中于均值附近,各类算法在排序过程中所需要的比较次数相对较少。 - 对于大规模的正态分布数据,快速排序和堆...

    Java排序算法txt

    ### Java排序算法:快速排序详解 #### 一、引言 快速排序(Quick Sort)是一种非常高效的排序算法,由英国计算机科学家C.A.R. Hoare于1962年提出。它采用分治策略来把一个序列分为较小的两个子序列,再递归地排序...

    算法合集之《信息学竞赛中搜索问题的常见优化技巧》.

    例如,在(USACO-weight)题中,通过对集合S中元素的智能排序进行搜索,可以找到满足条件的最小数列,从而优化解题过程。 2. **剪枝技术**:在搜索过程中,剪枝是一种非常有效的优化手段。它通过在搜索树中提前排除...

    C语言实现的插入排序

    在实际编程中,插入排序常被用于其他排序算法的辅助手段,例如快速排序和归并排序在处理小规模子问题时可能会采用插入排序,因为它们的递归深度较小,此时插入排序的常数因子影响不大。 总的来说,C语言实现的插入...

    基础排序 冒泡排序 插入排序 快速排序 双路快速排序 三路快速排序 堆排序 位运算

    在IT领域,排序算法是计算机科学中的核心概念,它们用于组织和优化数据处理。这里我们主要探讨的是几种基础的排序算法以及位运算的概念。 **冒泡排序**是一种简单直观的排序算法,它重复地遍历要排序的数列,一次...

    快速排序分区法zip.zip

    总结来说,这个压缩包提供了三种快速排序的分区实现,包括单向分区、双向分区和三指针分区,这些都是快速排序算法的重要组成部分,通过阅读和理解这些源码,开发者可以深入掌握快速排序的原理和技巧,提升算法能力。

    CFD编程优化-计算流体力学

    - **排序算法**:针对特定数据集选择合适的排序算法至关重要。例如,对于部分已排序的数据,插入排序可能比快速排序更为高效。 #### 编译器优化 现代编译器内置了多种自动优化技术,能够帮助开发者在不修改源代码...

Global site tag (gtag.js) - Google Analytics