C语言之排序

1.冒泡排序

冒泡排序就不多说了,只需要两层循环嵌套,两两比较确定相对正确的顺序即可。

2.插入排序

插入排序的思想就是每一次向后寻找一个再将其与前面有序的部分进行对比,寻找合适位置插入。

这里关键要避免让前移超出目前读取的数字,否则后面就会导致最好排序完会有最后一个数字没有进行排序。

3.堆排序

首先我们对进入的数组进行建堆,升序建大堆,大的在上,然后依次将堆顶和最后一个叶子节点交换,然后再将顶点进行下滤。一遍走完就可以实现排序。

4.选择排序

其思想就是每次找到序列中最大和最小的两个数分别放入两端

5.希尔排序

这个思想是基于插入排序的升级,开始就先将相距较远的数进行调整,减少后面的无用微调。

6.快速排序(都可以通过三值取中,小区间优化进行优化)

第一种霍尔经典排序,取左值作为key则右边先走,反之左边先走,防止卡死。

一边走到不符合一边区间的值,另外一边再走知道都到了不符合的地方进行交换,直至相遇,交换完毕,将key放入。

第二种,挖坑法,先传值,然后把坑给丢过去。

3.前后指针法,向后面找小于key的扔到前面。找完为止,最后再将key进行放入即可。

以上三种方式只是形式不同,思想内核是相同的。

下面是快排的核心思想实现。

通过人工栈进行模拟递归,可以防止爆栈。

7.归并排序

思想就是先2个2个排序然后4个4个直到全部排序完

非递归版本则是主要通过gap控制每次归并得个数,实现,2个归,4个归得顺序。特别要防止得就是越界问题!!第一点就是区间得越界检查,第二点是拷贝得个数检查。

8.计数排序

统计出现得次数去进行伪排序。

稳定性的概念

容易误解为排序方法快慢的稳定性

相关推荐
Jerry34 分钟前
LeetCode 209. 长度最小的子数组
算法
彦为君1 小时前
算法思维与经典智力题
java·前端·redis·算法
智能优化与强化学习1 小时前
Gym(Gymnasium)仿真环境详解(二):环境简介、入门算法、调参要点、核心挑战
算法·强化学习·gym·零基础入门·算法评估
mxwin1 小时前
Unity Shader exp 函数的算法与渲染应用
算法·unity·游戏引擎·shader
“码”力全开1 小时前
AI视频分析误报优化完整流程
算法·架构·边缘计算
深盾科技_Virbox2 小时前
深盾科技·Virbox产品体系全景解读:软件安全如何从加密锁走向全生命周期
java·大数据·算法·安全·软件需求
可编程芯片开发2 小时前
基于VSG虚拟同步发电机控制的三相并网逆变器带多组可变负载Simulink建模与仿真
算法
AI服务老曹2 小时前
国产NPU视觉算法参数配置说明
算法·性能优化·边缘计算
彦为君2 小时前
Redis最新版本特性
java·数据库·redis·算法·bootstrap
触底反弹3 小时前
🔥 字符串算法面试三连击:反转、回文、回文变种,搞懂这三题稳了!
前端·javascript·算法