基于比较的排序
1.冒泡排序:
谁大谁在最前面,每一轮把最大的顶到天花板上
效率太低—O(n^2)-------掌握swap
2.选择排序:效率太低,但经常用它内部的循环方式来找到最大值和最小值----怎么一次性求出数组–O(n^2)
3.插入排序:虽然平均效率低,但在序列基本有序时,它会很快,所以也有其使用范围
4.希尔排序:缩小增量排序,是插入排序的改良,对空间思维训练有帮助

  • 分治法:
    子问题拆分
    递归求解子问题
    合并子问题的解

5.快速排序:是最常规的排序法,其双向指针扫描和分区算法是核心-----特别地partition算法用来划分不同性质的元素
快速排序-----重视子问题的拆分
6.归并排序:空间换时间-----逆序对
归并重视子问题的解的合并
7.堆排序:用二叉堆数据结构=====插入排序+二分查找
以上7种都是基于比较的排序,可证明他们在元素随机顺序的情况下最好是nlogn
非比较排序:
1.计数排序:可以说是最快的O(N+K),k=maxOf(sourceArr)用它来解决问题时必须注意如果序列中的值分布非常广(最大值很大,元素分布很稀疏),空间将会浪费很多。
所以计数排序的适用范围是:序列的关键字比较集中,已知边界,且边界较小。
2.桶排序:先分桶,再用其他排序方法对桶内元素排序,按桶的编号依次取出。
用它解决问题必须注意序列的值是否均匀的分布在桶中
如果分布不均匀,那么个别桶中的元素会远多于其他桶,桶内排序用比较排序
极端情况下,全部在一个桶内,全部还会退化为nlgn。
其时间复杂度:O(N+C),其中C=(logN-logM),约等于N*lgN
3.基数排序:KN级别(K是最大数的位数)是整数数值型排序里面又快又稳定的,无论元素分布情况如何。只开辟固定的辅助空间(10个桶)
对比桶排序,基数排序每次需要的桶的数量并不多。而且基数排序几乎不需要任何“比较”操作,桶内多个数据必须进行基于比较操作的排序。
因此,在实际应用中,对十进制整数来说,基数排序更好用

  • 算法

排序算法的总结与使用题型相关推荐

  1. 伍六七带你学算法 进阶篇-排序算法

    给定一个整数数组 nums,将该数组升序排列. 示例 1: 输入:[5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:[5,1,1,2,0,0] 输出:[0,0,1,1,2,5] 各排序算 ...

  2. C++排序算法实现(更新中)

    比较排序法:如冒泡排序.简单选择排序.合并排序.快速排序.其最优的时间复杂度为O(nlogn). 其他排序法:如桶排序.基数排序等.时间复杂度可以达到O(n).但试用范围有要求. 桶排序:排序的数组元 ...

  3. 十种经典排序算法精粹(c语言版本)

    下面给出这段时间我苦心研究验证过的十种经典排序算法的C语言版本,即下面的排序算法: 插入排序,shell排序,冒泡排序,快速排序,选择排序,堆排序,归并排序,桶排序,基数排序和计数排序.整理出来以作备 ...

  4. 十大排序算法 导图总结

    以下为我们经常用到的十大典型排序算法导图,很多设计以及优化的思想值得去参考学习 因为代码较多,所以都添加到对应的实现注释中了,相关代码可以从Mind-mapping获取xmind源文件 参考文档: 基 ...

  5. C++实现十大排序算法(冒泡,选择,插入,归并,快速,堆,希尔,桶,计数,基数)排序算法时间复杂度、空间复杂度、稳定性比较(面试经验总结)

    排序算法分类 内部排序算法又分为基于比较的排序算法和不基于比较的排序算法,其分类如下: 比较排序:   直接插入排序    希尔排序 (插入)  冒泡排序     快速排序  (交换) 直接选择排序  ...

  6. C++拾取——使用stl标准库实现排序算法及评测

    今天看了一篇文章,讲各种语言的优势和劣势.其中一个观点:haskell非常适合写算法,因为使用者不用去关心具体的计算机实现,而只要关注于操作语义.这让它在专心研究算法的人中非常受欢迎.所以很多时候,语 ...

  7. 常用排序算法的C++实现

    排序是将一组"无序"的记录序列调整为"有序"的记录序列. 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在 ...

  8. python 排序算法 简书_Python---简析八大排序算法

    前言 1 .排序的概念 排序是计算机内经常进行的一种操作,其目的是将一组"无序"的记录序列调整为"有序"的记录序列. 排序分为内部排序和外部排序. 若整个排序过 ...

  9. php常见排序算去,PHP兑现常见排序算法

    PHP实现常见排序算法 //插入排序(一维数组) function insert_sort($arr){ $count = count($arr); for($i=1; $i $tmp = $arr[ ...

最新文章

  1. PyCUDA学习:gpuarray与kernel的抽象原型
  2. 河北高速盘点七大假牌假证违法案例:寒冬穿大裤衩开车
  3. DS, DB, WEB模块的安装(环境搭建) 学习日志 2012年7月10日
  4. Spring5源码 - 09 循环依赖解读
  5. windows下的守护进程C++
  6. 机器人--寒暄库(4)
  7. 架构整洁之道 pdf_代码有整洁之道,而架构同样有整洁之道
  8. python是什么软件-零基础入门Python怎么学习?老男孩python用什么软件
  9. 用組件封裝數據庫操作(一)
  10. PM42L-048 步进电机
  11. python课程结课感悟_关于python课程的感想
  12. 矩阵分解实现个性化推荐算法实践
  13. 鼠标双击DataGridView单元格变成ComboBox
  14. 使用JPBC实现双线性对加密算法(BasicIdent体制的java实现)
  15. 训练好的神经网络 如何预测_普通人如何拥有好声音 精简版入门训练方法总结...
  16. php发送短信(调用网易云信实现)
  17. 充电宝买哪种比较好?评价最好的充电宝推荐
  18. 英语学习-that和which区别
  19. 二叉搜索树的插入,删除,和中序遍历
  20. Python-机器学习(三)-KMeans聚类算法

热门文章

  1. python软件下载视频教程-Python视频教程下载:Python从入门到精通【传智播客】
  2. 编程语言python入门-编程语言入门(以python为例)
  3. 学python可以做什么-学会Python后都能做什么?介绍五种Python的实用场景
  4. 免费python网络课程-2019年10种免费的Python学习课程
  5. git中fatal: Authentication failed的问题 git不能clone
  6. php微信自动登录,利用php怎么实现一个自动登录微信并获取昵称的功能
  7. C# 判断是否是蜘蛛IP地址
  8. xml中加html源码,从xml获取数据以插入html标签,但在源代码中未看到
  9. input隐藏域赋值数组
  10. Markdown支持的语言