常用排序的应用场景

一.排序算法分类

1.插入排序法

直接插入排序,希尔排序(面试最常问)

2.交换排序

冒泡排序,快速排序(面试最常问)

3.选择排序

直接选择排序,堆排序(面试最常问)

4.归并排序

归并排序

5.基数排序

以上算是最常用的一些算法。

二.空间、时间复杂度、稳定性

三.性能分析

1.O(n^2)性能分析

平均性能为O(n^2)的有:直接插入排序,选择排序,冒泡排序

在数据规模较小时(9W内),直接插入排序,选择排序差不多。当数据较大时,冒泡排序算法的时间代价最高。性能为O(n^2)的算法基本上是相邻元素进行比较,基本上都是稳定的。

2.O(nlogn)性能分析

平均性能为O(nlogn)的有:快速排序,归并排序,希尔排序,堆排序。其中,快   排是最好的,其次是归并和希尔,堆排序在数据量很大时效果明显(堆排序适合处理大数据)。

大数据处理的一个例子:找出一千万个数中最小的前一百个数。

思路:建立一百个节点的大顶堆,首先将前一百个数放入堆中,之后每放入一个数就删除一个堆顶元素,最后剩下的就是最小的一百个数。当然也可以分区处理,感兴趣的小伙伴可以网上搜一下大神们的帖子。

这四种排序可看作为“先进算法”,其中,快排效率最高(大数据就不行了,而且速度有概率性),但在待排序列基本有序 的情况下,会变成冒泡排序,接近O(n^2).

希尔排序对增量的标准没有较为满意的答案,增量对性能会有影响。

归并排序效率非常不错,在数据规模较大的情况下,比希尔排序和堆排序要好。

多数先进的算法都是因为跳跃式的比较,降低了比较次数,但牺牲了排序的稳定 性。

3. 稳定性分析

分析稳定性之前首先要了解什么是稳定性,简单讲吧,要排序的数中有两个相同的数,用A算法进行排序后,两个相等数的位置不会互换,则A算法是稳定的,否则A不稳定。没听懂??那来个例子吧,现在要排序1,2,2这三个数,我们用A算法排序,如果排序后两个2的位置不会互换,则A算法是稳定的,如果互换了,则A算法就是不稳定的。好了,下面我们看肯那些是稳定的哪些是不稳定的吧。

稳定排序

插入排序,冒泡排序,二叉树排序,归并排序

不稳定排序

快速排序(快),希尔排序(些),选择排序(选),堆排序(一堆)。

记不住怎么办,其实只要你了解排序算法的原理,稍加分析就能得出结论,但如果你要死记硬背又怕自己记不住,哥也有办法,记住:只需记住一句话(快些选一堆美女一起玩儿)是不稳定的,其他都是稳定的,OK轻松搞定。

(特别感谢传a奇的经验分享)

时间: 2024-08-11 10:33:17

常用排序的应用场景的相关文章

Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序. 先来看看 8种排序之间的关系: 1.直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2]

常用排序算法比较与分析

一.常用排序算法简述 下面主要从排序算法的基本概念.原理出发,分别从算法的时间复杂度.空间复杂度.算法的稳定性和速度等方面进行分析比较.依据待排序的问题大小(记录数量 n)的不同,排序过程中需要的存储器空间也不同,由此将排序算法分为两大类:[内排序].[外排序]. 内排序:指排序时数据元素全部存放在计算机的随机存储器RAM中. 外排序:待排序记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中还需要对外存进行访问的排序过程. 先了解一下常见排序算法的分类关系(见图1-1) 图1-1 常见排

七种常用排序算法

七种常用排序算法 一.常见排序算法一览: 时间复杂度: 是一个函数,它定量描述了该算法的运行时间. 空间复杂度:一个算法在运行过程中临时占用存储空间大小的量度. 稳定性:保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同就稳定,反之不稳定. 视觉直观感受 7 种常用的排序算法 二.算法C#实现: 1. 直接插入排序: using System; using System.Collections.Generic; using System.Linq; using Sys

常用排序算法之——归并排序

归并排序的原理: 如果数组的元素个数大于1,则: 将数组平均分为两部分: 左边的数组归并排序:递归 右边的数组归并排序:递归 将两个各自有序的数组合并,需要一个额外的辅助数组,暂时保存合并结果:返回 否则,数组元素个数为1时,已经有序:直接返回. 稳定排序.时间复杂度在最坏.最好.平均情况下都为O(N lgN),空间复杂度为O(N). 代码: 1 #include <iostream> 2 using namespace std; 3 4 template<typename T>

常用排序算法之——快速排序

快速排序的原理: 首先找一个标兵值,等于某一个元素值:遍历数组,将数组分为小于标兵值和大于标兵值的两部分:然后分别对两个部分采用快速排序,递归. 分开数组时,维持一个指针,指向已找到小部分的最后一个元素:一个指针用于遍历. 不稳定排序算法.当数组已经有序时,时间复杂度最差,为O(N2),平均.最优情况下都为O(N lgN). 代码如下: 1 #include <iostream> 2 using namespace std; 3 4 template<typename T> 5 v

javascript常用排序算法实现

毕业后,由于工作中很少需要自已去写一些排序,所以那些排序算法都忘得差不多了,不过排序是最基础的算法,还是不能落下啦,于是找了一些资料,然后用Javascript实现了一些常用的算法,具体代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>

C++技术问题总结-第14篇 常用设计模式及其应用场景

设计模式是对设计原则的具体化.用江湖话说就是武林秘籍,总结出来的一些固定套路,编程界的<葵花宝典>. 个人意见,编程过程中设计原则进行遵循,对设计模式进行借鉴.完全按照套路来,有时反而简单问题复杂化. 常用的模式及其场景如下. 1) 单例模式. 单例模式是一种常用的软件设计模式. 在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源. 对应类图. 应用场景:如果希望在系统中某个类的对象只能存在

常用排序算法实现[交换排序之冒泡排序、快速排序]

相关知识 1. 稳定排序和非稳定排序: 稳定排序算法会依照相等的关键(换言之就是值)维持纪录的相对次序. 如果排序算法是稳定的,就是当有两个有相等关键的纪录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前. 2. 内排序和外排序 在排序过程中,所有需要排序的数都在内存,并在内存中调整它们的存储顺序,称为内排序: 在排序过程中,只有部分数被调入内存,并借助内存调整数在外存中的存放顺序排序方法称为外排序. 3.算法分类 排序算法从理论上分为如下几类: (1) 交换排序法:

常用排序算法时间复杂度和空间复杂度简析

1. preface /**** *    This article will try to explain something about: *        --Bubble sort. *        --Quick sort. *        --Merge sort. *        --Heap sort. *    To read this, some prerequisites is necessary: *        --a survive skill in C pr