一、冒泡排序-------循环n-1趟,每趟选一个相对最大的

最简单的排序,

冒泡排序,冒泡排序是循环N-1趟 ,从i=0开始,每趟从左到右,从j=0开始,比较N-1-i次,依次比较相邻索引对应的两数,左比右大则交换值,否则不变。这样趟i都能拿到一个最大值,即I-1个最大值,最后一个最小值不用比。排序结束。(优化点:如果某躺未交换,说明已正序,可终止)。

那么最好的情况就是序列本身就是升序的,一趟下来比较了n-1次不需要交换结束排序,时间复杂度为O(n);

最坏的情况序列本身降序,那么第一次就需要交换n-1次,第二次排序需要交换n-2次,最后一共需要交换(n-1)+(n-2)+(n-3)+….+1= n(n-1)/2,所以时间复杂度为O(n^2)。故时间复杂度为O(n)~O(n^2)。平均复杂度为O(n^2)。

二、选择排序

三、插入排序

N-1轮排序,

四、希尔排序

又称缩小增量排序,是一种优化后的高效的插入排序。目前看来,希尔的核心最后出来的并不是绝对有序的,是宏观排序,如果用希尔之后,再用一次插入排序,也能很高效的绝对排序。

原理:

比如,先2个为一组,数组的增量索引=N/2,N(奇数为N+1)个组,每组内的2个数进行一次小范围内的插入排序(需要换则其索引自然交换了)。第一轮的每组做完之后。

开始第二轮,增量索引变成N/2/2,N。。。再来一轮内部比较。

最后增量索引变成1,形成了只有一组,那希尔排序结束,得到一个大概的宏观排序结果,还需要做一次插入排序。

五、快速排序-------快是比冒泡快,原因是拿一个随机数拆成两份,递归此操作

随机,或就第一数X,先拿去和所有数做一趟比较排序后,把比X小的放左边,大的放右边。(核心就是这行)

然后再对两边的数分别就行如此递归快速排序。

常用的排序算法-快速记忆相关推荐

  1. 常用的排序算法的时间复杂度和空间复杂度

    常用的排序算法的时间复杂度和空间复杂度                                           1.时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出 ...

  2. STL常用的排序算法

    常用的排序算法 merge() sort() random_shuffle() reverse() merge() 以下是排序和通用算法:提供元素排序策略 merge: 合并两个有序序列,存放到另一个 ...

  3. 常用的排序算法的时间复杂度和空间复杂度 .

    常用的排序算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n2) O(n2) 稳定 O(1) 快速排序 O(n2) O(n*log2n) 不稳定 ...

  4. php递归算法排序,php常用的排序算法代码[冒泡,递归排序-PHP源码

    <script>ec(2);<script> php 常用的排序算法代码[冒泡,递归排序 冒泡排序算法 function bubblesort($arr) { $n=count ...

  5. 插入排序 php,常用的排序算法(二)--插入排序(PHP实现)

    常用的排序算法系列 插入排序 插入排序是一种逻辑上非常好理解的排序方式,整个排序的核心就是不断在当前已经排好部分数据的数组里,找到合适的位置插入新数据.就像抓扑克牌,抓一张,然后再手里已经部分已经排好 ...

  6. php1到5000排序,常用的排序算法(一)--快速排序(PHP实现)

    常用的排序算法系列 快速排序 假设当前需要从小到大进行排序,快速排序的核心思路是,从当前数组中,找到一个元素作为基准比较值(key),分别从两个方向进行比较.从后往前找,比key小元素放在数组前面.然 ...

  7. java语言冒泡排序法_Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等...

    本文实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序 首先是EightAlgorithms.java文件,代码如下: import jav ...

  8. 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序

    这篇文章主要介绍了Java如何实现八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序,需要的朋友可以参考下 本文实现了八个常用的排序算法:插入排序 ...

  9. java常用的排序算法的思想以及实现

    一些常见的排序算法的事项以及java实现 由于时间上的原因没有计算时间复杂度,以后有时间补上,或者大家有兴趣的可以自己算算 package com.sgcc.cn;import java.util.A ...

最新文章

  1. mysql 优化器算法_SQL 查询优化器底层原理解析【MySQL 篇】
  2. vim 配置文件 C/C++
  3. c语言放空一个数组,C++语言
  4. inux读取ISO文件或是光驱的方法--挂载
  5. advanced installer更换程序id_好程序员web前端培训分享kbone高级-事件系统
  6. 工作141:map形成数组
  7. LeetCode 1771. 由子序列构造的最长回文串的长度(最长回文子序)
  8. 玩转木浪云数据管理免费版使用篇之内容搜索与颗粒度恢复
  9. 关于apache httpd.conf脚本的理解
  10. 20. 顺时针打印矩阵
  11. linux备份没有vmlinuz,解决file /isolinux/vmlinuz0 not found
  12. VB编程操作AutoCAD线型
  13. 730-高并发下秒杀系统怎么设计?
  14. ios 相机开发 自动对焦
  15. 白光led 计算机模拟,大动态白光LED光辐射模拟器
  16. 360天擎彻底卸载的方法教程
  17. Openstack Cinder Ceph(RBD)备份恢复过程(backup/restore)
  18. 淘宝双十一前卖家要做好哪些准备?
  19. 【Python】Windows下安装scipy库步骤
  20. 2021年是做安卓开发人员的绝佳时机,成功入职阿里

热门文章

  1. google earth的网页版
  2. android 悬浮窗口禁止横屏显示,悬浮窗强制设置屏幕方向|App开发交流区|研发交流|雨滴科技技术论坛 - Powered by Discuz!...
  3. fets去除回车符号
  4. 计算机时代杂志好吗,计算机时代是什么级别的刊物
  5. 微信小程序 - 手持弹幕 | 全屏炫酷滚屏神器源代码模板,超详细代码和注释复制粘贴即可使用(全屏文字滚动,支持调节滚动速度、字体大小、字体颜色)文字内容横屏滚动,手机变身 LED 屏
  6. [计算机毕业设计]大数据的B站数据分析与可视化
  7. context 浅析
  8. MySQL 8.0 初学与基础项目实践
  9. Mencoder转换视频格式(1)
  10. linux环境下的进程