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

排序算法 —— 冒泡排序

目录

1.冒泡排序的思想

2.冒泡排序的实现

3.冒泡排序的总结


1.冒泡排序的思想

冒泡排序的思想就是在待排序序列中依次比较相邻两个元素将大的or小的元素往后挪,每一趟都能保证将至少一个元素挪动到正确的位置,然后在待排序序列中重复该过程

2.冒泡排序的实现

代码如下:

void BubbleSort(int* a, int n)
{
	for (int j = 0; j < n; j++)  //枚举结束位置和最后一个元素位置的差值 
	{
		for (int i = 1; i < n-j; i++) //依次枚举相邻的两个元素 
		{
			if (a[i - 1] > a[i])
			{
				swap(&a[i - 1], &a[i]);
			}
		}
	}
}

可以看出,冒泡排序十分的暴力,枚举的次数在最好和最坏情况下都是一个等差数列,但是,有些比较是没有必要的。比如:当某一趟排序中没有发生交换的时候,说明序列有序了,不需要再比较了,所以我们可以对代码进行优化。

优化之后的代码如下:

  • 我们可以增加一个标记位,标记是否发生了交换。
#include <stdio.h>

void swap(int* p1, int *p2)
{
	int t = *p1;
	*p1 = *p2;
	*p2 = t;
}

void BubbleSort(int* a, int n)
{
	for (int j = 0; j < n; j++)  //枚举结束位置和最后一个元素位置的差值 
	{
		int flag = 0;
		for (int i = 1; i < n-j; i++) //依次枚举相邻的两个元素 
		{
			if (a[i - 1] > a[i])
			{
				swap(&a[i - 1], &a[i]);
				flag = 1;
			}
		}

		if (flag == 0)
		{
			break;
		}
	}
}


int main()
{
	int nums[] = {5,4,2,6,3,1,8,9,7};
	
	BubbleSort(nums, 10);
	
	int i = 0;
	while(i < sizeof(nums)/sizeof(int))
	{
		printf("%d ",nums[i]);
		i++;
	}
	
	return 0;
}

3.冒泡排序的总结

  • 时间复杂度:O(N^2)。
  • 空间复杂度:O(1)。
  • 稳定性:稳定 。

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

相关文章:

  • 理解深度学习模型——高级音频特征表示的分层理解
  • arthas使用 笔记
  • 语音提示器-WT3000A离在线TTS方案-打破语种限制/AI对话多功能支持
  • 论文速读:YOLO-G,用于跨域目标检测的改进YOLO(Plos One 2023)
  • 计算机网络原理总结C-网络层
  • 【K8s】Kubernetes 证书管理工具 Cert-Manager
  • Linux文件目录结构
  • 【STM32 Blue Pill编程实例】-直接内存访问 (DMA)使用
  • 计算机毕业设计Spark+大模型动漫推荐系统 动漫视频推荐系统 漫画分析可视化大屏 漫画爬虫 漫画推荐系统 漫画爬虫 知识图谱 大数据
  • 蓝桥杯模块(四)数码管动态显示
  • C++ list类
  • 提升网络安全防御有效性,服务器DDoS防御软件解读
  • Jmeter启动默认设置为中文
  • Halcon 多相机统一坐标系(标定)
  • 操作系统期末|考研复习知识点汇总 - 持续更新
  • 相机工作距离计算
  • 国家科技创新2030重大项目
  • 微信网页授权回调地址放多个参数的方法
  • 分布式理论基础
  • ESD防静电闸机如何保护汽车电子产品
  • 再通过for循环遍历list集合时,怎么删除list集合中的元素
  • ShardingProxy服务端分库分表
  • Flink动态CEP快速入门
  • 基础数据结构——队列(链表实现,数组实现)
  • 卷积神经网络评价指标
  • 关于 Linux 内核“合规要求”与俄罗斯制裁的一些澄清