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

8. 数据结构—交换排序

1)冒泡排序

#include<bits/stdc++.h>
using namespace std;
typedef int ElemType;

//冒泡排序
//最多排序n-1趟,每趟将确定一个最小的放在队头 
//第i趟比较n-i次(从后往前找最小)
//添加了一个flag标记位用来记录每趟是否存在交换,若不存在则说明排序结束 
void BubbleSort(ElemType A[],int n){
	for(int i=0;i<n-1;i++){  //n-1趟排序 
		bool flag=false;  //标记此趟是否存在交换
		for(int j=n-1;j>i;j--){  //每趟从后往前 
			if(A[j-1]>A[j]){
				ElemType t=A[j-1];
				A[j-1]=A[j];
				A[j]=t;
				flag=true;
			} 
		}
		if(!flag)   //如果没有发生交换,说明已经有序了 
 			return;
	} 
}
 
 
int main(void){
	int a[5]={34,-13,24,324,21};
	BubbleSort(a,5); 
	for(int i=0;i<5;i++)
		cout<<a[i]<<" ";
	return 0;
}
 
  •  时间复杂度:O(n^2)   

最好情况下:序列整体有序,第一趟比较n-1次之后即可完成排序,复杂度O(n)

最坏情况下:  序列整体逆序,需要比较n-1趟,第i趟排序比较n-i次关键字,复杂度O(n^2)

tips:无特别说明下,时间复杂度指的是最坏时间复杂度

  • 空间复杂度:O(1) 

仅仅只是使用了常数个辅助空间(两数交换的时候),故空间复杂度为O(1) 

  • 稳定性:稳定 

从代码中,我们可以看到,当两数相等时,我们并不交换其位置,所以冒泡算法稳定。 

2)快速排序——递归实现

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

最好情况下:选取基准够好,刚好将其划分成了一个类似完全二叉树,时间复杂度O(nlogn) 

最坏情况下:  选取基准最差,直接划分成了一个单支树,时间复杂度O(n^2)

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

由于快速排序是递归的,所以需要借助一个递归工作栈来保存每层递归调用的必要信息,其容量与递归调用的最大层数一致。

最坏情况下:O(n)

最好情况下:O(logn)

平均情况下:O(logn) 

  • 稳定性:不稳定 

例如表{1,2 ,2},以1为基准的时候,经过一趟排序之后,相对位置发生了改变。


http://www.kler.cn/news/362120.html

相关文章:

  • Notepad++将搜索内容所在行选中,并进行复制等操作
  • 【vue 封装一个select组件】封装一个select组件,包括select样式的修改,以及解决select,onchange事件失效问题
  • juzigei/基于Java语言的充电桩系统(充电桩小程序+充电桩管理平台)
  • 将java项目jar包打包成exe服务
  • etcd入门到实战
  • 基于知识图谱的美食推荐系统
  • 【代码随想录Day50】图论Part02
  • java语言知识点(1)
  • Selenium:设置元素等待、上传文件、下载文件
  • 数字化转型中的IT价值:如何让管理层相信“钱花得值”?
  • 如何判断一个数是几位数与这个数是否为回文数并打印出其逆序数
  • 为何大家都对谷歌老号白包趋之若鹜
  • 从零开始学PHP之helloworld
  • 计算套餐续订率:梧桐数据库与`oracle`实现`SQL`的细微差异分析
  • C++运算出现整型溢出
  • Opensearch集群部署【docker、服务器、Helm多种部署方式】
  • LeetCode 142 - 环形链表 II
  • 动态规划19:53. 最大子数组和
  • solidworks管理员运行install.bat提示[sC]0penService 失败 5:拒绝访问。请按任意键继续...
  • YOLO11改进 | 注意力机制 | 添加SE注意力机制
  • U盘文件删除后的全面恢复指南
  • 纯css实现瀑布流! 附源码!!!
  • Android Studio Gradle版本、插件以及Android API对应关系(持续更新)
  • 二百六十八、Kettle——同步ClickHouse清洗数据到Hive的DWD层静态分区表中(每天一次)
  • docker 误删gitlab文件,另类的删库跑路,如何进行恢复?
  • css 不管目录结构层级。父元素有很多块子元素,孙子元素。希望从左往右从上往下排列