当前位置: 首页 > news >正文

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

1.1 排序的概念

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

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

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

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

1.2 常见的排序算法

1.3 各排序接口与实现汇总

/* 排序实现的接口 *//* 打印 */
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))

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

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

http://www.xdnf.cn/news/1358119.html

相关文章:

  • Linux服务实验
  • [论文阅读] 软件工程 | GPS算法:用“路径摘要”当向导,软件模型检测从此告别“瞎找bug”
  • Kaggle项目:一次 Uber 出行数据分析的完整思路
  • 【机器学习】 11 Mixture models and the EM algorithm
  • 如何捕获组件的异常情况
  • Node.js依赖管理与install及run命令详解
  • Redis实战-缓存的解决方案(一)
  • Flink直接缓冲存储器异常解析与解决方案
  • comfyUI背后的一些技术——CLIP
  • 暗影哨兵:安全运维的隐秘防线
  • 高并发AI服务部署方案:vLLM、TGI、FastChat性能压测报告
  • 使用 Fargate 在 AWS ECS 上运行 Spring Boot 应用程序
  • QML Charts组件之坐标轴示例
  • maven私服架构
  • Tesla智能座舱域控制器(MCU)的系统化梳理
  • ChainVault:重塑亚洲黄金交易基建,引领RWA金融新浪潮
  • Vue 3多语言应用开发实战:vue-i18n深度解析与最佳实践
  • 项目学习总结(4)
  • 【(含模板)滑动窗口 - LeetCode】3. 无重复字符的最长子串
  • 基于深度学习的餐盘清洁状态分类
  • 基于stm32汽车雨刮器控制系统设计
  • 普元低代码开发平台:开启企业高效创新新征程
  • SQL Server从入门到项目实践(超值版)读书笔记 24
  • 【C++】 9. vector
  • 线段树相关算法题(2)
  • 3D打印机管理后台与RabbitMQ集成的业务场景
  • Windows Server存储副本智能同步优化方案
  • 【RAGFlow代码详解-4】数据存储层
  • 第四章:大模型(LLM)】07.Prompt工程-(12)其他prompt方法
  • 人工智能之数学基础:离散型随机变量