数据结构—排序

本篇主要介绍这八大排序,这八大排序是数据结构篇非常重要的内容,虽然看起来很多,我一开始也是这样感觉,但是自己尝试复现后,感觉也没有那么难,相信大家也可以的!!!

1、插入排序

(1)直接插入排序 O(N)~O(N^2)

基本思想:把待排序的数据按其数据值的大小逐个插入到一个已经排好序的有序序列中,直到所有的数据被插入完为止,得到一个新的有序序列

<1>具体介绍与过程

<2>代码实现

(2)希尔排序 O(N^1.3)

基本思想:希尔排序法又称缩小增量法;先选定一个整数(通常是gap=n/3+1),把待排序数据分成各组,所有距离相等的数据分在同一组内,并对每一组内的数据进行排序,然后gap=gap/3+1得到下一个整数,再将数组分成各组,进行插入排序,当gap=1时,相当于直接插入排序

<1>具体介绍与过程

<2>代码实现

2、选择排序

(1)直接选择排序 O(N^2)

基本思想:每一次从待排序的数据元素中选出最小和最大的一个元素,存放在序列的起始/末尾位置,直到全部待排序元素排完

<1>具体介绍与过程

<2>代码实现

(2)堆排序

基本思想:是指利用堆积树这种数据结构所设计的一种排序算法,它是选择排序的一种;它是通过堆来进行选择排序;需要注意的是排升序要建大堆,排降序建小堆

<1>具体介绍和过程

<2>代码实现

3、交换排序

(1)快速排序(递归版本)

基本思想:是一种二叉树结构的交换排序方法;任取待排序的元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子树列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止

<1>具体介绍和过程

<2>代码实现

(2)快速排序(非递归版本)

基本思想:借助数据结构------栈;

<1>具体介绍和过程

<2>代码实现

(3)冒泡排序

基本思想:冒泡排序是一种最基础的交换排序(具有教学意义);之所以叫做冒泡排序,因为每一个元素都可以像一个小气泡一样,根据自身大小一点一点向数组的一侧移动

<1>具体介绍和过程

<2>代码实现

4、归并排序

(1)归并排序

基本思想:采用分治法的一个非常典型的应用;将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段有序;若将两个有序表合并成一个有序表,称为二路归并

<1>具体介绍和过程

<2>代码实现

5、不比较排序

(1)计数排序

基本原理:计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用

1)统计相同元素出现次数

2)根据统计的结果将序列回收到原来的序列中

<1>具体介绍和过程

<2>代码实现

相关推荐
aramae4 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
荆棘鸟智能5 小时前
城市感知设备怎么统一接入?从多协议网关到设备模型的中间件架构设计
人工智能·算法·边缘计算
淡海水5 小时前
13-04-面试-源码级深度追问链
数据结构·unity·面试·c#·游戏引擎·源码·il2cpp
Logic1016 小时前
C语言/数据结构位运算题解:异或XOR找出时尚聚会中的“独特颜色“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
INGNIGHT9 小时前
270 · 电话号码的字母组合II(Trie)
linux·算法
2401_839080549 小时前
C++常见八股
数据结构·c++·算法
青山是哪个青山10 小时前
LeetCode 188:买卖股票的最佳时机 IV
算法
暮雨封夕10 小时前
跳表(Skip List)详解:原理、实现、使用场景与实际应用
数据结构
mikuyyds10 小时前
geo-toolbox 插件算法解析:RUSLE 与 MUSLE 的工程化落地
算法·rust·gis
a1879272183110 小时前
【算法】树(二):队列与祖先——BFS 骨架三配件、短路透传与合流
算法·leetcode·二叉树··bfs·算法讲解·树遍历