数据结构—排序

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

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>代码实现

相关推荐
搞笑症患者9 分钟前
压缩感知(Compressed Sensing, CS)
算法·最小二乘法·压缩感知·正交匹配追踪omp·迭代阈值it算法
im_AMBER12 分钟前
Leetcode 101 对链表进行插入排序
数据结构·笔记·学习·算法·leetcode·排序算法
予枫的编程笔记13 分钟前
【Java集合】深入浅出 Java HashMap:从链表到红黑树的“进化”之路
java·开发语言·数据结构·人工智能·链表·哈希算法
快手技术30 分钟前
AAAI 2026|全面发力!快手斩获 3 篇 Oral,12 篇论文入选!
前端·后端·算法
颜酱32 分钟前
前端算法必备:滑动窗口从入门到很熟练(最长/最短/计数三大类型)
前端·后端·算法
做科研的周师兄34 分钟前
【MATLAB 实战】栅格数据 K-Means 聚类(分块处理版)—— 解决大数据内存溢出、运行卡顿问题
人工智能·算法·机器学习·matlab·kmeans·聚类
X在敲AI代码34 分钟前
leetcodeD3
数据结构·算法
余瑜鱼鱼鱼40 分钟前
Java数据结构:从入门到精通(十一)
数据结构
码农小韩42 分钟前
基于Linux的C++学习——循环
linux·c语言·开发语言·c++·算法
CoderCodingNo1 小时前
【GESP】C++五级/四级练习(双指针/数学) luogu-P1147 连续自然数和
开发语言·c++·算法