常用的排序算法-快速记忆
一、冒泡排序-------循环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)时间频度 一个算法执行所耗费的时间,从理论上是不能算出 ...
- STL常用的排序算法
常用的排序算法 merge() sort() random_shuffle() reverse() merge() 以下是排序和通用算法:提供元素排序策略 merge: 合并两个有序序列,存放到另一个 ...
- 常用的排序算法的时间复杂度和空间复杂度 .
常用的排序算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n2) O(n2) 稳定 O(1) 快速排序 O(n2) O(n*log2n) 不稳定 ...
- php递归算法排序,php常用的排序算法代码[冒泡,递归排序-PHP源码
<script>ec(2);<script> php 常用的排序算法代码[冒泡,递归排序 冒泡排序算法 function bubblesort($arr) { $n=count ...
- 插入排序 php,常用的排序算法(二)--插入排序(PHP实现)
常用的排序算法系列 插入排序 插入排序是一种逻辑上非常好理解的排序方式,整个排序的核心就是不断在当前已经排好部分数据的数组里,找到合适的位置插入新数据.就像抓扑克牌,抓一张,然后再手里已经部分已经排好 ...
- php1到5000排序,常用的排序算法(一)--快速排序(PHP实现)
常用的排序算法系列 快速排序 假设当前需要从小到大进行排序,快速排序的核心思路是,从当前数组中,找到一个元素作为基准比较值(key),分别从两个方向进行比较.从后往前找,比key小元素放在数组前面.然 ...
- java语言冒泡排序法_Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等...
本文实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序 首先是EightAlgorithms.java文件,代码如下: import jav ...
- 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序
这篇文章主要介绍了Java如何实现八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序,需要的朋友可以参考下 本文实现了八个常用的排序算法:插入排序 ...
- java常用的排序算法的思想以及实现
一些常见的排序算法的事项以及java实现 由于时间上的原因没有计算时间复杂度,以后有时间补上,或者大家有兴趣的可以自己算算 package com.sgcc.cn;import java.util.A ...
最新文章
- mysql 优化器算法_SQL 查询优化器底层原理解析【MySQL 篇】
- vim 配置文件 C/C++
- c语言放空一个数组,C++语言
- inux读取ISO文件或是光驱的方法--挂载
- advanced installer更换程序id_好程序员web前端培训分享kbone高级-事件系统
- 工作141:map形成数组
- LeetCode 1771. 由子序列构造的最长回文串的长度(最长回文子序)
- 玩转木浪云数据管理免费版使用篇之内容搜索与颗粒度恢复
- 关于apache httpd.conf脚本的理解
- 20. 顺时针打印矩阵
- linux备份没有vmlinuz,解决file /isolinux/vmlinuz0 not found
- VB编程操作AutoCAD线型
- 730-高并发下秒杀系统怎么设计?
- ios 相机开发 自动对焦
- 白光led 计算机模拟,大动态白光LED光辐射模拟器
- 360天擎彻底卸载的方法教程
- Openstack Cinder Ceph(RBD)备份恢复过程(backup/restore)
- 淘宝双十一前卖家要做好哪些准备?
- 【Python】Windows下安装scipy库步骤
- 2021年是做安卓开发人员的绝佳时机,成功入职阿里
热门文章
- google earth的网页版
- android 悬浮窗口禁止横屏显示,悬浮窗强制设置屏幕方向|App开发交流区|研发交流|雨滴科技技术论坛 - Powered by Discuz!...
- fets去除回车符号
- 计算机时代杂志好吗,计算机时代是什么级别的刊物
- 微信小程序 - 手持弹幕 | 全屏炫酷滚屏神器源代码模板,超详细代码和注释复制粘贴即可使用(全屏文字滚动,支持调节滚动速度、字体大小、字体颜色)文字内容横屏滚动,手机变身 LED 屏
- [计算机毕业设计]大数据的B站数据分析与可视化
- context 浅析
- MySQL 8.0 初学与基础项目实践
- Mencoder转换视频格式(1)
- linux环境下的进程