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

冒泡排序实现以及优化

一,冒泡排序说明

冒泡排序是从第一个元素开始和后面一个元素进行判断是否满足左小右大,如果不满足就交换位置,再拿第二个和第三个进行上述操作一直到第n-1和第n个。

经过上述的一轮操作就可以把第一个最大值放到最右边,在进行n轮上述操作就可完成所有元素的排序

因此冒泡排序的时间复杂度稳定为O(n^2)

二,冒泡排序代码

//
// Created by 27893 on 2025/8/10.
//#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "BubbleSort.h"void BubbleSort(SortTable *table) {for (int i=0;i<table->length;i++) {for (int j=0;j<table->length-i-1;j++) {if (table->data[j].key>table->data[j+1].key) {swap(&table->data[j],&table->data[j+1]);}}}
}void swap(Element*a,Element*b) {Element*temp=malloc(sizeof(Element));memcpy(temp,a,sizeof(Element));memcpy(a,b,sizeof(Element));memcpy(b,temp,sizeof(Element));free(temp);
}

三,冒泡排序的优化

1.第一种

随着我们的交换可能不需要n轮就已经将所有元素排好序了,比如我们在对第一个最大值进行排序时就可以把所有元素排好序,就没必要进行第二轮了,我们就可以用一个变量来记录这轮内循环是否有过交换,若果没有就说明已经排好序了

void BubbleSort(SortTable *table) {for (int i=0;i<table->length;i++) {int isSorted=1;for (int j=0;j<table->length-i-1;j++) {if (table->data[j].key>table->data[j+1].key) {isSorted=0;swap(&table->data[j],&table->data[j+1]);}}if (isSorted) {break;}}
}

2.第二种

如下图假如经过第一轮排序,从65开始后面的元素就已经有序了,那么下轮排序就只需要循环到65为止后面的就不需要比较了

void BubbleSortV3(SortTable *table) {int newIndex=0;do {int n=table->length;for (int i=0;i<n-1;i++) {if (table->data[i].key>table->data[i+1].key) {swap(&table->data[i],&table->data[i+1]);newIndex=i+1;}}n=newIndex;}while (newIndex>0);
}
http://www.xdnf.cn/news/17448.html

相关文章:

  • django基于Python的设计师作品平台的数据可视化系统设计与实现
  • 数字图像处理2——图像增强
  • Java设计模式之开闭原则介绍与说明
  • TypeScript中的type和interface的区别是什么?
  • 红楼梦文本数据分析
  • LeetCode 869.重新排序得到 2 的幂:哈希表+排序(一次初始化)
  • 前端开发的奇技淫巧 --- 持续更新中
  • 使用线性降维方法进行数据降维
  • 使用tcp ntrip 协议 接收数据报错 java.net.SocketException: Connection reset
  • MariaDB 数据库管理与web服务器
  • 变量详解:创建初始化与内存管理
  • 【数据结构入门】栈和队列的OJ题
  • Virtio 驱动关键结构体与函数详解
  • RabbitMQ面试精讲 Day 18:内存与磁盘优化配置
  • 01.【面试题】在SpringBoot中如何实现多数据源配置
  • UNet改进(31):基于Adaptive Attention的UNet设计与实践
  • 智慧社区(十一)——Spring Boot 实现 Excel 导出、上传与数据导入全流程详解
  • 【永磁同步电机数学模型全程推导】【7 转矩方程】
  • IntelliJ IDEA 2025.2 重磅发布
  • 移动端音频处理实践:59MB变声应用的技术实现分析
  • 【GPT入门】第43课 使用LlamaFactory微调Llama3
  • GitLab 零基础入门指南:从安装到项目管理全流程
  • 复杂项目即时通讯从android 5升级android x后遗症之解决 ANR: Input dispatching timed out 问题 -优雅草卓伊凡
  • Android Intent 解析
  • 绕过文件上传漏洞并利用文件包含漏洞获取系统信息的技术分析
  • GPT OSS深度解析:OpenAI时隔6年的开源模型,AI民主化的新里程碑?
  • ubuntu 安装内核模块驱动 DKMS 介绍
  • RL代码实践 02——策略迭代
  • IDEA 如何导入系统设置
  • Go语言中切片(Slice)的拷贝