【数据结构】排序算法全解析

1.1 排序的概念

排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。

稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。

内排序:数据元素全部放在内存中的排序。

外排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。

1.2 常见的排序算法

1.3 各排序接口与实现汇总

cpp 复制代码
/* 排序实现的接口 */

/* 打印 */
void printArray(int* a, int n);

/* 测试排序的性能对比 */
void TestOP();

/* 插入排序 */
void InsertSort(int* a, int n);

/* 希尔排序 */
void ShellSort(int* a, int n);

/* 选择排序 */
void SelectSort(int* a, int n);

/* 堆排序 */
void AdjustDown(int* a, int n, int root);
void HeapSort(int* a, int n);

/* 冒泡排序 */
void BubbleSort(int* a, int n);

/* 快速排序 */
int PartSort1(int* a, int begin, int end);
int PartSort2(int* a, int begin, int end);
int PartSort3(int* a, int begin, int end);
void QuickSort(int* a, int left, int right);

/* 快速排序 非递归实现 */
void QuickSortNonR(int* a, int left, int right);

/* 归并数组 */
void MergeArr(int* a, int begin1, int end1, int begin2, int end2, int* tmp);

/* 归并排序递归实现 */
/* left:左下标 right:右下标 */
/* tmp:归并所需的临时空间 */
/* 时间复杂度:O(N*log(2)N) */
/* 空间复杂度:O(N) */
void _MergeSort(int* a, int left, int right, int* tmp);

/* 归并排序递归实现 */
void MergeSort(int* a, int n);

/* 归并排序非递归实现 */
void MergeSortNonR(int* a, int n);

/* 归并file1和file2到mfile */
void _MergeFile(FILE* file1, FILE* file2, FILE* mfile);

/* 外排序对文件内数据排序 */
void MergeSortFile(const char* file);

/* 计数排序 */
void CountSort(int* a, int n);

直接插入排序&希尔排序:【数据结构】玩转插入排序:直接插入与希尔排序详解-CSDN博客

选择排序&堆排序:【数据结构】选择排序:直接选择与堆排序详解-CSDN博客

快速排序(冒泡排序太过简单就不放实现了):【数据结构】快速排序:算法详解与优化技巧-CSDN博客

计数排序:【数据结构】计数排序:有时比快排还快的整数排序法-CSDN博客

归并排序:【数据结构】归并排序:高效分治的奥秘-CSDN博客

1.4 排序总结

(上图中 快速排序 如果有三数取中,时间复杂度最坏情况就不是O(N^2))

稳定性定义: 数组中相同值,排完序相对顺序可以做到不变就是稳定的,否则就不稳定。

这些排序的时间复杂度、空间复杂度不要死记硬背,重在理解。

相关推荐
2601_962218612 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
吞下星星的少年·-·2 小时前
The 2026 ICPC Asia East Continent Online Contest (II)(构造)
数据结构·算法
stolentime4 小时前
洛谷P10515 转圈题解
c++·算法·数学建模·贪心算法
和裕5 小时前
蜂窝板 vs 七层瓦楞重型纸箱:大件工业设备运输性能与成本全对比
大数据·运维·网络·人工智能·算法
衡石科技5 小时前
Data_Agent记忆机制与经验复用衡石分析智能体会话记忆与长期学习技术解析
人工智能·科技·学习·算法·企业级bi
Msshu1236 小时前
2~5串锂电快充优选|XSP36 Type‑C升压/升降压快充管理芯片
数据结构·随机森林·贪心算法·排序算法·线性回归·启发式算法
shirsl6 小时前
算法 Day 2 滑动窗口 + 栈 / 单调栈
开发语言·python·算法
土司大王7 小时前
LeetCode hot100 回溯专题总结:Java 通用模板、决策树模型
java·算法·leetcode·决策树
2601_962218617 小时前
万象生鲜系统订单全生命周期状态同步技术实现业务可视
大数据·数据库·人工智能·python·算法
那年窗外下的雪.8 小时前
AIDC 学习日志|第 22 天|All-Active/Single-Active 故障演练设计
服务器·网络·学习·算法·哈希算法