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

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

冒泡排序

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

//交换
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.xdnf.cn/news/607987.html

相关文章:

  • 信息安全管理与评估赛项参考答案-模块1网络平台搭建
  • 【软件测试】第三章·软件测试基本方法(基于需求的测试方法)
  • Trae+12306 MCP,10分钟搭建行程可视化助手
  • Gmsh 代码深度解析与应用实例
  • 【开源项目1】基于机器学习木马查杀引擎项目
  • 1.3 线性系统的时域分析法
  • kafka速度快的原理
  • 【时时三省】(C语言基础)对被调用函数的声明和函数原型
  • [Datagear] [SQL]实现分组统计同时带汇总行的两种方式对比分析
  • AI架构师的新工具箱:ChatGPT、Copilot、AutoML、模型服务平台
  • NtfsLookupAttributeByName函数分析之和Scb->AttributeName的关系
  • vim快速移动光标
  • 多路径传输(比如 MPTCP)控制实时突发
  • 动态规划经典三题_完全平方数
  • JFace中MVC的表格使用介绍
  • C++高效求解非线性方程组的实践指南
  • Ubuntu 18.04 升级内核到 5.X(< 5.10)
  • 【YOLOs-CPP-图像分类部署】03-解决报错
  • LSNet:以小见大,CVPR2025全新轻量级主干网络
  • Node.js 库大全
  • 怎么判断一个Android APP使用了KMM这个跨端框架
  • AI是否会取代人类?浔川问答①
  • 怎么判断一个Android APP使用了Tauri 这个跨端框架
  • css 里面写if else 条件判断
  • 量化indicators指标
  • @JsonFormat时区问题
  • 从渗透测试角度分析 HTTP 数据包
  • 3D打印仿造+ AI大脑赋能,造出会思考的全景相机
  • 【摄影测量与遥感】卫星姿态角解析:Roll/Pitch/Yaw与Φ/Ω/Κ的对应关系
  • 第十天 高精地图与定位(SLAM、RTK技术) 多传感器融合(Kalman滤波、深度学习)