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

数据结构 -- 交换排序(冒泡排序和快速排序)

冒泡排序

基于“交换”的排序:根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置

//交换
void swap(int &a,int &b){int temp = a;a = b;b = temp;
}//冒泡排序
void BubbleSort(int A[],int n){for(int i=0;i<n-1;i++){bool flag = false;			//表示本趟冒泡是否发生交换的标志for(int j = n-1;j>i;j--)if(A[j-1]>A[j]){swap(A[j-1],A[j]);flag = true;}if(flag == false)	return ;		//本趟遍历后没有发生交换,说明表已经有序}
}
算法性能分析

在这里插入图片描述

是否适用于链表?

适用,可从前往后“冒泡”,每⼀趟将更⼤的元素“冒”到链尾

在这里插入图片描述

快速排序

算法思想

在这里插入图片描述

image-20250513113311757
//用第一个元素将待排序元素划分为左右两个部分
int Partition(int A[],int low,int high){int pivot = A[low];while(low<high){while(low<high&&A[high]>=pivot)	--high;A[low] = A[high];while(low<high&&A[low]<=pivot)	++low;A[high] = A[low];}A[low] = pivot;return low;
}//快速排序
void QuickSort(int A[],int low,int high){if(low<high){int pivotpos = Partition(A,low,high);QuickSort(A,low,pivotpos);QuickSort(A,pivotpos,high);}
}
算法效率分析

时间复杂度=O(n*递归层数)

空间复杂度=O(递归层数)

在这里插入图片描述
在这里插入图片描述

时间复杂度空间复杂度
最好O(nlog2n)O(log2n)
最坏O(n2)O(n)

若每⼀次选中的“枢轴”将待排序序列划分为很不均匀的两个部分,则会导致递归深度增加,算法效率变低

若初始序列有序或逆序,则快速排序的性能最差(因为每次选择的都是最靠边的元素)

若每⼀次选中的“枢轴”将待排序序列划分为均匀的两个部分,则递归深度最⼩,算法效率最⾼

快速排序算法优化思路:尽量选择可以把数据中分的枢轴元素。

eg:①选头、中、尾三个位置的元素,取中间值作为枢轴元素;②随机选⼀个元素作为枢轴元素

在这里插入图片描述

注:408原题中说,对所有尚未确定最终位置的所有元素进行⼀遍处理称为“⼀趟”排序,因此⼀次“划分”≠⼀趟排序。

⼀次划分可以确定⼀个元素的最终位置,而⼀趟排序也许可以确定多个元素的最终位置。

http://www.lryc.cn/news/2384823.html

相关文章:

  • 【算法】: 前缀和算法(利用o(1)的时间复杂度快速求区间和)
  • macOS 安装 PostgreSQL
  • 打破传统范式,线上 3D 画展彰显多元亮点
  • Linux系统:基础命令之 ls~pwd~cd
  • MuJoCo安装记录
  • 软件工程(八):UML类图的几种关系
  • python定时删除指定索引
  • 基于OAuth2-proxy和Keycloak为comfyui实现SSO
  • SmartSoftHelp 之 SQL Server 数据库安全备份与安全还原详解---深度优化版:SmartSoftHelp DeepCore XSuite
  • Spring 代理与 Redis 分布式锁冲突:一次锁释放异常的分析与解决
  • 【数据结构】队列的完整实现
  • 2025 全球优质 AI 产品深度测评:从通用工具到垂直领域的技术突围 —— 轻量聚合工具篇
  • Python爬虫实战:获取天气网最近一周北京的天气数据,为日常出行做参考
  • 根据YOLO数据集标签计算检测框内目标面积占比(YOLO7-10都适用)
  • Helm简介、安装、配置、使用!
  • LLM笔记(九)KV缓存(2)
  • 开发 前端搭建npm v11.4.0 is known not to run on Node.js v14.18.1.
  • LVS 负载均衡集群应用实战
  • MySQL——基本查询内置函数
  • Day34打卡 @浙大疏锦行
  • 【Jitsi Meet】(腾讯会议的平替)Docker安装Jitsi Meet指南-使用内网IP访问
  • AdGuard解锁高级版(Nightly)_v4.10.36 安卓去除手机APP广告
  • C++修炼:红黑树的模拟实现
  • 基于Python+YOLO模型的手势识别系统
  • 自制操作系统day10叠加处理
  • docker初学
  • ## Docker 中 Elasticsearch 启动失败:日志文件权限问题排查与解决
  • 鸿蒙Flutter实战:23-混合开发详解-3-源码模式引入
  • leetcode:2469. 温度转换(python3解法,数学相关算法题)
  • 【软件安装】Windows操作系统中安装mongodb数据库和mongo-shell工具