白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇

数据结构--排序(中) 目录1、堆排序1.1代码实现1.2总结2、交换排序2.1 冒泡排序2.1.1代码实现2.1.2总结2.2快速排序2.2.1 hoare版本2.2.1.1 例子2.2.1.2 代码实现2.2.2 挖坑法2.2.2.1 例子2.2.2.2 代码实现2.2.3 前后指针法2.2.3.1 例子2.2.3.2 代码实现2.3 快排优化2.2.4 总结 1、堆排序    堆排序(Heapsort)是指利用堆积... 阅读详情
AI摘要

本文总结了冒泡排序、直接插入排序、直接选择排序、希尔排序、归并排序、快速排序及堆排序等七种常用排序算法的主要思路,旨在帮助读者高效复习,为面试做好准备。

       在我的博客对冒泡排序,直接插入排序,直接选择排序,希尔排序,归并排序,快速排序和堆排序这七种常用的排序方法进行了详细的讲解,并做成了电子书以供大家下载。下载地址为:http://download.youkuaiyun.com/detail/morewindows/4443208。

       有网友提议到这本《MoreWindows白话经典算法之七大排序》电子书讲解细致用来平时学习是非常好的,但是页数有22页,不太合适做面试前的复习资料。因此在这里将这七种常用的排序方法进行下总结,以便大家更好的复习这些经典的排序算法,为面试打下良好的基础。

 

首先回顾下各种排序的主要思路:

一.       冒泡排序

冒泡排序主要思路是:

通过交换使相邻的两个数变成小数在前大数在后,这样每次遍历后,最大的数就“沉”到最后面了。重复N次即可以使数组有序。


冒泡排序改进1:在某次遍历中如果没有数据交换,说明整个数组已经有序。因此通过设置标志位来记录此次遍历有无数据交换就可以判断是否要继续循环。


冒泡排序改进2:记录某次遍历时最后发生数据交换的位置,这个位置之后的数据显然已经有序了。因此通过记录最后发生数据交换的位置就可以确定下次循环的范围了。

 

二.       直接插入排序

直接插入排序主要思路是:

每次将一个待排序的数据,插入到前面已经排好序的序列之中,直到全部数据插入完成。

 

三.       直接选择排序

直接选择排序主要思路是:

数组分成有序区和无序区,初始时整个数组都是无序区,然后每次从无序区选一个最小的元素直接放到有序区的最后,直到整个数组变有序区。


上面这三种排序都是非常简单的,下面这四种排序略有难度,希望读者能多多实践以加深理解。

 

四.       希尔排序

希尔排序主要思路是:

先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。由于希尔排序是对相隔若干距离的数据进行直接插入排序,因此可以形象的称希尔排序为“跳着插”

 

五.       归并排序

归并排序主要思路是:

当一个数组左边有序,右边也有序,那合并这两个有序数组就完成了排序。如何让左右两边有序了?用递归!这样递归下去,合并上来就是归并排序。

 

六.       快速排序

快速选择排序主要思路是:

“挖坑填数+分治法”,首先令i =L; j = R; 将a[i]挖出形成第一个坑,称a[i]为基准数。然后j--由后向前找比基准数小的数,找到后挖出此数填入前一个坑a[i]中,再i++由前向后找比基准数大的数,找到后也挖出此数填到前一个坑a[j]中。重复进行这种“挖坑填数”直到i==j。再将基准数填入a[i]中,这样i之前的数都比基准数小,i之后的数都比基准数大。因此将数组分成二部分再分别重复上述步骤就完成了排序。

 

七.       堆排序

堆排序主要思路用张图示来表示更好:


可见堆排序的难点就在于堆的的插入和删除。

堆的插入就是——每次插入都是将新数据放在数组最后,而从这个新数据的父结点到根结点必定是一个有序的数列,因此只要将这个新数据插入到这个有序数列中即可。

堆的删除就是——堆的删除就是将最后一个数据的值赋给根结点,然后再从根结点开始进行一次从上向下的调整。调整时先在左右儿子结点中找最小的,如果父结点比这个最小的子结点还小说明不需要调整了,反之将父结点和它交换后再考虑后面的结点。相当于从根结点开始将一个数据在有序数列中进行“下沉”。

因此,堆的插入和删除非常类似直接插入排序,只不是在二叉树上进行插入过程。所以可以将堆排序形容为“树上插”

 

 

再用一张图表示下这七种常用的排序方法的关系。

 

 


好了,七种常用的排序方法就总结到这了,相信大家上机写下代码再看下这张图必定会印象深刻。在准备面试资料时可以打印最后这张图,这样就能在面试前快速的复习一下了,祝大家面试顺利,拿到自己满意的offer。

 

新版电子书《MoreWindows白话经典算法之七大排序第2版(高清)》已经上传成功,下载地址是:http://download.youkuaiyun.com/detail/morewindows/4560056

 

转载请标明出处,原文地址:http://blog.youkuaiyun.com/morewindows/article/details/7961256

排序子系统 C语言版 这是一个我们数据结构课程设计做的排序子系统,当时我们学的是c语言,很适合于大学生作为课程设计之用,当然也可以做为毕业设计的参考,真心希望对你的课程设计有所帮助!!! 立即下载

相关推荐

天龙怀旧技能二叉树数据

天龙怀旧技能二叉树 1、易语言源码 2、txt数据包含特征码

用数据结构c语言写成绩排序,数据结构(C语言版)---排序

1、排序:重排表中元素。2、根据数据元素是否完全在内存中,将排序算法分为内部排序和外部排序两类。3、插入排序:将一个待排序记录按关键字大小插入到前面已排好的子序列中,直到全部记录插入完成。1)直接插入排序void insertsort(sqlist L){int i, j;for (i = 2; i <=L.length; ++i){if (L.r[i].key < L.r[i - 1...

weixin_34902728的博客 1171

RocketMQ源码分析之消息轨迹

文章目录前言一、消息轨迹二、消息轨迹源码分析1、producer端2、consumer端三、消息轨迹中存储的信息1.TraceContext2.TraceBean3.TraceType四、总结 前言   本篇文章将会从以下方面介绍消息轨迹:什么是消息轨迹?如何启用消息轨迹?示例demo、消息轨迹的源码分析和消息轨迹中存储的信息。最后会用一张图来总结消息轨迹的工作原理。 一、消息轨迹 1.什么是消息轨迹? 消息轨迹是用来跟踪记录消息发送、消息消费的轨迹。 2.如何启用消息轨迹? broker端 需要在b

不爱学习的小妞博客 1075

【数据结构---排序】很详细的哦

本篇文章主要介绍数据结构中的几种排序算法~

yyzzzj0301的博客 1135

Unity Scriptable Build Pipeline (SBP) 详解

Unity 的可编程构建管线(Scriptable Build Pipeline, SBP)标志着引擎构建架构的一次关键转变,它从不透明的 C++ 实现转向了灵活、可扩展的 C# 框架。SBP 旨在满足现代游戏开发日益增长的需求,通过改进增量处理和高效缓存机制显著提升了构建性能。它赋予开发者对内容构建过程前所未有的控制力,从而能够针对特定项目需求进行深度定制。尽管 SBP 是 Unity 推荐的 Addressables 系统的重要基础层,但理解其核心组件、构建流程和高级功能对于优化大型项目、简化 CI/C

m0_57771536的博客 2208

从稀疏表示到低秩表示(一)

确定研究方向后一直在狂补理论,最近看了一些文章,有了些想法,顺便也总结了representation系列的文章,由于我刚接触,可能会有些不足,愿大家共同指正。 从稀疏表示到低秩表示系列文章包括如下内容: 一、 sparse representation 二、 一、 sparse representation 1  sparsity  一个线性表示解决的问题如下图所示:

彼岸花 3万+

排序算法 数据结构

排序算法 数据结构

weixin_58464994的博客 336

ESP32设备驱动-MLX90393磁场传感器驱动

MLX90393 磁场传感器可以在运行时重新编程为不同的模式和不同的设置。 该传感器使用 Melexis 专有的 Triaxis® 技术提供与沿 XYZ 轴感应的磁通密度成比例的 16 位输出,还提供温度输出信号。 这些数字值可通过 I2C 和 SPI 获得,其中 MLX90393 是总线上的从设备。

视觉与物联智能 2350

【白话经典算法系列之八】 MoreWindows白话经典算法之七大排序总结篇

在我的博客对冒泡排序,直接插入排序,直接选择排序,希尔排序,归并排序,快速排序和堆排序这七种常用的排序方法进行了详细的讲解,并做成了电子书以供大家下载。下载地址为:http://download.youkuaiyun.com/detail/morewindows/4443208。        有网友提议到这本《MoreWindows白话经典算法之七大排序》电子书讲解细致用来平时学习是非常好的,但是页数

随风吹笛 641

Open3D——RANSAC 三维点云空间直线拟合【2025最新版】

使用RANSAC算法在点云数据中拟合三维空间直线的python代码实现。博客长期更新,本文最新更新时间为:2025年3月23日。

点云侠的博客 7353

手把手教你用ESP32-S3打造智能聊天机器人-立创实战派

本文将详细介绍如何利用立创ESP32-S3开发板,烧录小智AI程序,快速实现一个功能强大的聊天机器人。

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 9910
上一篇: 秒杀多线程第十五篇 关键段,事件,互斥量,信号量的“遗弃”问题
下一篇: 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
MoreWindows
MoreWindows 《白话经典算法》、《秒杀多线程》作者 《白话经典算法》、《秒杀多线程》作者 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄15年 2万+粉丝 157原创
评论 26
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值