八种常见排序算法

1、选择排序:每趟从待排序的记录序列中选择关键字最小的记录放置到已排序表的最前位置,直到全部排完。
2、直接插入排序:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。
3、希尔排序:先将要排序的一组数按某个增量d分成若干组,每组中记录的下标相差d.对每组中全部元素进行排序,然后再用一个较小的增量对它进行,在每组中再进行排序。当增量减到1时,整个要排序的数被分成一组,排序完成。
4、基数排序:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。
5、冒泡排序:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上
而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较
小的往上冒。
6、快速排序:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。
7、归并排序:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
8、堆排序:初始时把要排序的数的序列看作是一棵顺序存储的二叉树,调整它们的存储顺序,
使之成为一个堆,这时堆的根节点的数最大。然后将根节点与堆的最后一个节点
交换。然后对前面(n-1)个数重新调整使之成为堆。依此类推,直到只有两个节点
的堆,并对它们作交换,最后得到有n个节点的有序序列。
排序算法优劣
一、稳定性:
稳定:冒泡排序、直接插入排序、归并排序和基数排序
不稳定:选择排序、快速排序、希尔排序、堆排序
二、时间复杂性比较

平均情况   最好情况    最坏情况     辅助存储

基数排序   O(n)         O(n)            O(n)            O(rd+n)

堆排序      O(nlogn)  O(nlogn)      O(nlogn)     O(1)

归并排序  O(nlogn)   O(nlogn)      O(nlogn)    O(n)

快速排序  O(nlogn)   O(nlogn)      O(n2)         O(logn)

希尔排序  O(n1.5)     O(n)            O(n1.5)       O(1)

插入排序  O(n2)        O(n)            O(n2)          O(1)

选择排序  O(n2)        O(n2)          O(n2)          O(1)

冒泡排序  O(n2)        O(n2)          O(n2)          O(1)

、排序算法的选择
1.数据规模较小
1)待排序列基本序的情况下,可以选择直接插入排序
2)对稳定性不作要求宜用简单选择排序,对稳定性有要求宜用插入或冒泡
2.数据规模不是很大
1)完全可以用内存空间,序列杂乱无序,对稳定性没有要求,快速排序,此时要付出logN)的额外空间。
2)序列本身可能有序,对稳定性有要求,空间允许下,宜用归并排序
3.数据规模很大
1)对稳定性有求,则可考虑归并排序。
2)对稳定性没要求,宜用堆排序
4.序列初始基本有序(正序),宜用直接插入,冒泡

分析各种排序算法的优劣相关推荐

  1. 如何分析一个“排序算法”?

    学习排序算法,我们除了学习它的算法原理.代码实现之外,更重要的是要学会如何评价.分析一个排序算法.那分析一个排序算法,要从哪几个方面入手呢? 排序算法的执行效率 对于排序算法执行效率的分析,我们一般会 ...

  2. 【算法设计与分析】排序算法性能分析

    github:项目地址 一.实验目的 掌握选择排序.冒泡排序.合并排序.快速排序.插入排序算法原理 掌握不同排序算法时间效率的经验分析方法,验证理论分析与经验分析的一致性. 二.实验概述 排序问题要求 ...

  3. 2022搜狐校园 情感分析 × 推荐排序 算法大赛 baseline

    比赛链接:https://www.biendata.xyz/competition/sohu_2022/ 完整代码 可关注ChallengeHub 回复"搜狐"即可获取 赛题背景 ...

  4. 基础排序算法···1

    最近要把所有排序算法写入博客. 这是上学期的工程实践题目,经典排序,当时算法倒是其次,主要是结合了QT做的界面,感叹于QT的信号与槽机制,感觉在显示多次排序结果时总感觉会出些问题,比如归并排序和快速排 ...

  5. 八大排序算法稳定性分析

    八大排序算法稳定性分析 稳定性定义: 排序前后两个相等的数相对位置不变,则算法稳定. 稳定性的好处: 从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用. 各排序算法的稳 ...

  6. 排序算法 之希尔排序及时间复杂度分析

    排序算法之 冒泡排序及性能优化(时间复杂度+空间复杂度分析) 排序算法之 简单选择排序及时间复杂度分析 排序算法之 直接插入排序及时间复杂度分析 希尔排序 算法思想:将整个待排序列分割成若干个子序列( ...

  7. 八大排序算法稳定性分析,原来稳定性是这个意思...

    点击上方蓝字"轮子工厂"关注公号 后台回复"我要造轮子"获取100本经典图书 稳定性定义: 排序前后两个相等的数相对位置不变,则算法稳定. 稳定性得好处: 从一 ...

  8. 数据结构实验:内部排序算法的性能分析

    文章目录 前言 一.问题描述 二.问题分析 三.实验结果及分析 (1)实验数据描述 (2)实验结果 (3)性能分析 四.源代码 前言 记录下本学期的数据结构实验 本实验主要集中于比较几种内部排序算法 ...

  9. 各种排序算法的稳定性分析

    各种排序算法的稳定性分析 稳定性排序算法 冒泡排序 插入排序 归并问题 不稳定排序算法 选择排序 快速排序 堆排序 各种排序算法思路不清楚的请看 链接 稳定性:稳定性指在排序完成以后,相同元素之间的相 ...

最新文章

  1. Access数据库如何批量操作呀 ?
  2. 运维自动化之ansible playbook安装apache
  3. VULKAN学习笔记-inter教学四篇
  4. open ai gpt_您实际上想尝试的GPT-3 AI发明鸡尾酒
  5. TCP/IP校验和(浅析+实例)
  6. 微服务拆分需要考虑的必要因素与坚持原则
  7. php代码的健壮性,代码健壮性的几点思考 - 逍遥客 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  8. 在linux上禁用ip,防止frps转发的端口被爆破,并屏蔽境外ip
  9. python的实时音频传送_python – 使用Alexa传输音频的最简单示例
  10. c语言输出七个换行6,多样例输出,如何去掉最后一个回车
  11. iptables介绍与实践
  12. 家庭上网用路由器和ADSL的连接
  13. 华硕Android原始密码,华硕(ASUS)路由器默认密码是多少? | 192路由网
  14. aspcms 可以改成MySQL_ASPCMS免改数据库 快速修改后台登陆密码-♚付涛纪实阁♚
  15. ITSM系统核心流程
  16. 骑行318、 2016.7.23
  17. imtoken1比1官方正版可后台获取助记词+安卓苹果双端源码
  18. Java接入微信支付ApiV3详细教程
  19. selenium+python:元素定位的八种方式
  20. 05 Bean实例化整体流程

热门文章

  1. Python字典(dict )的几种遍历方式
  2. Python6种创建字典的方式
  3. python基础教程:装饰器的高级应用
  4. Python制作植物大战僵尸小游戏
  5. python教程:关于 [lambda x: x*i for i in range(4)] 理解
  6. java console press any key_请问在JAVA中怎么实现在控制台下press any key to continue的功能?...
  7. php ajax 点击后刷新当前页面,ajax请求值后返回会刷新页面?
  8. ubuntu运行docker报错:invalid mount config for type “bind“: field Source must not be empty.(没解决)
  9. 进程间通信 IPC 的本地过程调用 LPC(Local Procedure Call)和远程过程调用 RPC(Remote Procedure Call)
  10. python collections模块(数据结构常用模块)计数器Counter 双向队列deque 默认字典defaultdict 有序字典OrderedDict 可命名元组namedtuple