Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >排序算法图解(插入、选择、冒泡、快速、合并、希尔等等)

排序算法图解(插入、选择、冒泡、快速、合并、希尔等等)

作者头像
老梁
发布于 2019-09-10 09:54:16
发布于 2019-09-10 09:54:16
1.9K0
举报

插入排序

  1. 从左至右两两对比,右边的数比左边的小,交换,交换,不断往右移动

选择排序

  1. 选定最左边的数A,第二个数B,A和B比较,A>B则交换;B大于A,则取B后一位与A做相同的比较,不断右移遍历完,则把最小的放在了最左边。再取第二个数变为A,做同样的步骤

冒泡排序

  1. 同样是经过两两对比,比如下图,从左边开始,第1,2位数对比,大的右移,第2,3位数对比,大的右移,以此类推,知道遍历到末尾,则最大的数冒泡到最右边
  2. 再回到开头,再次按原方法对比右移,到前一次右移到末尾的前一位结束

快速排序

  1. 选择最左边的数作为基点A,位置标记为i,最右边标记为j,然后i右移,遇到比A大的停下,j向左移动,遇到比A小的停下,然后i和j对应的数交换
  2. 当i和j相遇后,i,j对应的数要和A对比,比A大,继续走,当i或j有个数比A小时,该数与A交换;然后分成两份,交换数的左边和右边各自执行同样的算法

合并排序

  1. 合并排序简而言之就是分而治之的思想
  2. 把所有数据一步步拆分,再不断的两两合并排序

希尔排序

  1. 希尔排序是基于插入排序的以下两点性质而提出改进方法的:
    1. 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率
    2. 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位
  2. 希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终位置前进一大步
  3. 然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,但是到了这步,需排序的数据几乎是已排好的了(此时插入排序较快)。
  4. 假设有一个很小的数据在一个已按升序排好序的数组的末端。可能会进行n次的比较和交换才能将该数据移至正确位置。而希尔排序会用较大的步长移动数据,所以小数据只需进行少数比较和交换即可到正确位置

桶排序

  1. 工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)
  2. 桶排序以下列程序进行:
    1. 设置一个定量的数组当作空桶子。
    2. 寻访序列,并且把项目一个一个放到对应的桶子去。
    3. 对每个不是空的桶子进行排序。
    4. 从不是空的桶子里把项目再放回原来的序列中。

计数排序

  1. 是一种稳定的线性时间排序算法。计数排序使用一个额外的数组 {\displaystyle C} C ,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。
  2. 算法的步骤如下:
    1. 找出待排序的数组中最大和最小的元素
    2. 统计数组中每个值为i的元素出现的次数,存入数组 C 的第i项
    3. 对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加)
    4. 反向填充目标数组:将每个元素i放在新数组的第 C[i]项,每放一个元素就将C[i]减去1

基数排序

  1. 是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较
  2. 将所有待比较数值(正整数)统一为同样的数字长度,数字较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。

堆排序

  1. 是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子节点的键值或索引总是小于(或者大于)它的父节点。

最小堆

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-12-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
❤️十大排序算法详解❤️——可能是你看过最全的,完整版代码
兄弟们,应上篇数据结构的各位要求,今天我开始工作了,开始肝算法,剑指offer还在路上,我真想开车去接它,奈何码神没有驾照的开车,算了,弄排序算法吧,有点长,耐心看啊,原创不易,你们懂的,先上一张图
秋名山码神
2022/12/13
3650
❤️十大排序算法详解❤️——可能是你看过最全的,完整版代码
万字长文|十大基本排序,一次搞定!
大家好,我是老三,一个刷不动算法的程序员。排序算法相关题目尽管在力扣中不是很多,但是面试中动不动要手撕一下。接下来,我们看一下十大基本排序,
三分恶
2021/09/08
5400
十种排序算法总结(冒泡、插入、选择、希尔、归并、堆、快速,计数,桶,基数)
该文章介绍了如何利用C++实现一个简单的HTTP服务器,包括处理客户端请求、解析请求体、返回响应以及关闭连接。主要使用了C++的流和字符串处理功能,以及基本的HTTP协议知识。
s1mba
2017/12/22
1.1K0
十种排序算法总结(冒泡、插入、选择、希尔、归并、堆、快速,计数,桶,基数)
10大常用的排序算法(算法分析+动图演示)
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
Fivecc
2022/11/21
4190
10大常用的排序算法(算法分析+动图演示)
面试中的 10 大排序算法总结
查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中。因为其实现代码较短,应用较常见。所以在面试中经常会问到排序算法及其相关的问题。但万变不离其宗,只要熟悉了思想,灵活运用也不是难事。一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码。对这两种排序的代码一定要信手拈来才行。还有插入排序、冒泡排序、堆排序、基数排序、桶排序等。面试官对于这些排序可能会要求比较各自的优劣、各种算法的思想及其使用场景。还有要会分析算法的时间和空间复杂度。通常查找和排序算法的考察是面试的开始,如果这些问题回答不好,估计面试官都没有继续面试下去的兴趣都没了。所以想开个好头就要把常见的排序算法思想及其特点要熟练掌握,有必要时要熟练写出代码。
哲洛不闹
2018/09/18
1.2K0
面试中的 10 大排序算法总结
这或许是东半球分析十大排序算法最好的一篇文章
本文全长 14237 字,配有 70 张图片和动画,和你一起一步步看懂排序算法的运行过程。
五分钟学算法
2019/06/18
5770
这或许是东半球分析十大排序算法最好的一篇文章
十大经典排序算法:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、计数排序、基数排序、桶排序
排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。
用户11375356
2024/11/22
3.2K0
十大经典排序算法:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、计数排序、基数排序、桶排序
【数据结构与算法】十大经典排序算法深度解析:冒泡排序、选择排序、插入排序、归并排序、快速排序、希尔排序、堆排序、计数排序、桶排序、基数排序
这个序列是逐渐减小的,gap的值较大时,数据可以更快的前后变动,但不容易"基本有序";gap较小时数据前后变动较慢,但更接近"基本有序"。 通常可以选取gap = n/3, gap = gap/3, ...,直到gap= 1。
倔强的石头
2024/12/06
9680
【数据结构与算法】十大经典排序算法深度解析:冒泡排序、选择排序、插入排序、归并排序、快速排序、希尔排序、堆排序、计数排序、桶排序、基数排序
【Kick Algorithm】十大排序算法及其Python实现
看到好像春招都已经陆续都开始了,最近抽空打算把自己和朋友的经验整理一下分享出来。作为一个刚刚经历秋招打击的自闭儿童,可以非常负责任地说手撕算法是面试中必考的点,而且非常重要。
NewBeeNLP
2020/08/26
4240
【Kick Algorithm】十大排序算法及其Python实现
十大排序:插入/希尔/选择/堆/冒泡/快速/归并/计数/基数/桶排序 汇总(C语言)
在计算机科学中,排序算法是一种重要的算法类别,用于将一组元素按照特定的顺序进行排列。排序算法的应用非常广泛,从日常生活中的字典排序到大规模数据处理中的并行排序,都离不开排序算法的支持。
用户11317877
2024/10/16
1590
十大排序:插入/希尔/选择/堆/冒泡/快速/归并/计数/基数/桶排序 汇总(C语言)
写代码?程序猿?你不能不懂的八大排序算法的Python实现
信息获取后通常需要进行处理,处理后的信息其目的是便于人们的应用。信息处理方法有多种,通常由数据的排序,查找,插入,删除等操作。本章介绍几种简单的数据排序算法和高效的排序算法.
风骨散人Chiam
2020/10/28
3540
十大经典排序算法(动态演示+代码)
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子节点的键值或索引总是小于(或者大于)它的父节点。
用户6543014
2020/06/03
9420
Java实现八种排序算法详解
对于直接插入排序问题,数据量巨大时。 将数的个数设为n,取奇数k=n/2,将下标差值为k的数分为一组,构成有序序列。 再取k=k/2 ,将下标差值为k的书分为一组,构成有序序列。 重复第二步,直到k=1执行简单插入排序。
对话、
2022/02/22
3360
Java实现八种排序算法详解
面试常用排序算法总结
其他的排序算法也经常会问到,虽然在工作中,我们很少有需要自己手写排序算法的机会,但是这种入门级的算法却是证明我们能力的一种简单方法.因此要熟悉掌握.
呼延十
2019/07/01
1.2K0
面试常用排序算法总结
排序算法之希尔、归并、堆和基数排序
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
海仔
2019/10/28
5220
十种常见排序算法
十种常见排序算法一般分为以下几种: (1)非线性时间比较类排序:交换类排序(快速排序和冒泡排序)、插入类排序(简单插入排序和希尔排序)、选择类排序(简单选择排序和堆排序)、归并排序(二路归并排序和多路归并排序);
恋喵大鲤鱼
2018/08/03
1.1K0
十种常见排序算法
十大排序算法详解(一)冒泡排序、选择排序、插入排序、快速排序、希尔排序[通俗易懂]
  冒泡排序是比较基础的排序算法之一,其思想是相邻的元素两两比较,较大的数下沉,较小的数冒起来,这样一趟比较下来,最大(小)值就会排列在一端。整个过程如同气泡冒起,因此被称作冒泡排序。   冒泡排序的步骤是比较固定的:
全栈程序员站长
2022/09/14
8010
十大排序算法详解(一)冒泡排序、选择排序、插入排序、快速排序、希尔排序[通俗易懂]
Python实现常见的排序算法
本章介绍使用Python实现场景的几种排序算法。分别有冒泡算法、快速排序、插入排序、希尔排序、选择排序、堆排序、归并排序、计数排序、桶排序、基数排序。
夜雨飘零
2020/06/02
4780
Python实现排序算法
本章介绍使用Python实现场景的几种排序算法。分别有冒泡算法、快速排序、插入排序、希尔排序、选择排序、堆排序、归并排序、计数排序、桶排序、基数排序。
用户3577892
2020/06/11
5240
golang刷leetcode各种排序算法
排序算法可以说是一项基本功,解决实际问题中经常遇到,针对实际数据的特点选择合适的排序算法可以使程序获得更高的效率,有时候排序的稳定性还是实际问题中必须考虑的,这篇博客对常见的排序算法进行整理,包括:插入排序、选择排序、冒泡排序、快速排序、堆排序、归并排序、希尔排序、二叉树排序、计数排序、桶排序、基数排序。
golangLeetcode
2022/08/02
3000
golang刷leetcode各种排序算法
推荐阅读
相关推荐
❤️十大排序算法详解❤️——可能是你看过最全的,完整版代码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档