算法系列5之交换排序

一.交换排序

1.冒泡排序

(1)冒泡排序:从头开始按照大小两两交换排序

(2)选择排序:先找到最大/小的,在和最后/前的位置交换(备份下标)...再依次找第二大/小的

(3)冒泡优化:在第一层循环中添加标志位,如果交换函数执行,标志位定为0;未执行,证明该数组有序,直接退出第一层循环

(4)冒泡优化2:交换的过程中,交换到某个值时,后面都不再进行交换,证明后面全部有序,下次直接从该值之前进行交换即可

例:假设从49之后全部有序,下次直接冒泡49之前的即可

2.快速排序

思想

x^2+y^2<(x+y)^2

意思是把一组数据不断的进行分割排序,理解上面的公式,时间复杂度不断的变小

双边排序法

1.备份第一个值和最后一个值充当挡板 ,在任意找一个值当做基点

2.先从右边开始,右边的值凡是大于基点值,就--right;之后在找左边,同理凡是小于的,left++

3.都找到后便交换这两个不符合上述条件的值,while循环直到 left=right 后该轮全部结束

4.最后把基点值和left/right的值交换,递归重复排序

变化的过程

核心:找基点

单边排序法

思想

1.备份startIndex对应的值,定义mark记录下标startIndex,索引i从startIndex+1位置开始

2.往后依次判断,如果小于备份值,该值和mark交换,mark++

3.走完之后,把mark标记的数据和基点(startIndex)标记数据交换,递归重复此操作

二.代码

1.冒泡代码

.h

.c

main.c

2.快排代码

.h

.c

相关推荐
C++ 老炮儿的技术栈39 分钟前
基于Qt实现轻量化本地音乐播放器
开发语言·c++·qt·c·播放器·音乐
qq_4480111641 分钟前
C语言中的柔性数组
c语言·开发语言·柔性数组
leisoo80971 小时前
财报数据怎么排雷本地化Python构建财务异常预警系统
人工智能·python·算法
qz_Serene3 小时前
C++:类和对象(上)
开发语言·c++
luj_17683 小时前
塔防牌:策略与卡牌的智慧碰撞
服务器·c语言·开发语言·经验分享·算法
wuyk5554 小时前
3.链表:用指针串联的动态数据结构
c语言·开发语言·数据结构·链表
郝学胜-神的一滴4 小时前
干货版《算法导论》17:二叉树核心原理、遍历逻辑与高阶实操全解
数据结构·c++·python·算法·计算机·编程
爱编程的小新☆4 小时前
【LeetCode】从递归到 Flood Fill:5 道题吃透 DFS 的选择、回溯与标记
java·算法·leetcode·深度优先·回溯·flood fill
Water_Sunzhipeng4 小时前
2024牛客暑期多校训练营1
算法
hetao17338374 小时前
2026-08-09~08-14 hetao1733837 的刷题记录
c++·算法