冒泡排序-Bubble Sort

C/C++ Bubble sort冒泡排序算法详解及源码 Bubble sort冒泡排序算法是一种简单的排序算法,它通过重复遍历待排序的元素,比较相邻元素的大小,并依次交换位置,直到整个序列有序。 阅读详情

算法思想:

设数组长度为N。
1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将两个数据交换。
2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。
3.N=N-1,如果N不为0就重复前面二步,否则排序完成。

代码

基本实现:

void bubbleSort(vector<int> &nums){
    int length=nums.size();
    for(int i=length-1;i>0;i--){
        for(int j=0;j<i;j++){
            if(nums[j]>nums[j+1]){
                swap(nums[j],nums[j+1]);
            }
        }
    }
}

下面对其进行优化,设置一个标志,如果这一趟发生了交换,则为true,否则为false。明显如果有一趟没有发生交换,说明排序已经完成。

void bubbleSort2(vector<int> &nums){
    int length=nums.size();
    bool flag;
    for(int i=length-1;i>0;i--){
        flag=false;
        for(int j=0;j<i;j++){
            if(nums[j]>nums[j+1]){
                swap(nums[j],nums[j+1]);
                flag=true;
            }
        }
        if(flag==false)
            break;
    }
}

再做进一步的优化。如果有100个数的数组,仅前面10个无序,后面90个都已排好序且都大于前面10个数字,那么在第一趟遍历后,最后发生交换的位置必定小于10,且这个位置之后的数据必定已经有序了,记录下这位置,第二次只要从数组头部遍历到这个位置就可以了。i 不是i–,而是跨度大的缩小。

void bubbleSort3(vector<int> &nums){
    int length=nums.size();
    int i=length-1,tmp_i;
    while(i>0){
        tmp_i=i;    //i作为右边遍历边界
        i=0;        //i给初值0
        for(int j=0;j<tmp_i;j++){
            if(nums[j]>nums[j+1]){
                swap(nums[j],nums[j+1]);
                i=j;    //i计数交换的最后位置,如果没有交换(有序),i=0
            }
        }
    }
}

时间复杂度:O(n^2)
冒泡排序毕竟是一种效率低下的排序方法,在数据规模很小时,可以采用。数据规模比较大时,最好用其它排序方法。

python:实现Bubble sort冒泡排序(附完整源码) 阅读详情

相关推荐

MPI和openMP并行计算-冒泡排序

MPI和openMP并行计算-冒泡排序

白话经典算法系列之一 冒泡排序的三种实现

冒泡排序是非常容易理解和实现,,以从小到大排序举例: 设数组长度为N。 1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。 2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。 3.N=N-1,如果N

MoreWindows Blog 19万+

告别命令行恐惧!用TBtools的MCScanX插件,5分钟搞定拟南芥和水稻的基因组共线性分析

本文介绍如何利用TBtools的MCScanX插件快速完成拟南芥和水稻的基因组共线性分析,无需命令行操作,5分钟即可生成专业可视化结果。通过图形化界面简化传统MCScanX的复杂流程,特别适合非生物信息背景的研究者,显著提升基因组数据分析效率。

dianzhuique8587的博客 377

冒泡排序

#include "stdio.h" #include "stdlib.h" #include "time.h" #define SIZE 10 void MaopaoSort(int *a,int len) { int i,j,k,temp; for(j=0;j { for(i=0;i { if(a[i]>a[i+1]) { temp=a[i+1]; a[i+1]=a

woniu199166的博客 465

VS Code ESP-IDF无法找到源文件、头文件波浪线解决

背景:想要编译小智AI项目,可以正常编译。但是一些头文件,例如#include <nvs.h>等无法找到。

Hot_Ant的博客 1491

从零到一:DETR模型在自定义数据集上的实战部署与调优

本文详细介绍了DETR模型在自定义数据集上的实战部署与调优过程,包括环境准备、数据转换、模型配置、训练技巧及问题排查。通过具体代码示例和实用建议,帮助开发者高效完成从零到一的DETR模型部署,特别适合目标检测领域的实践应用。

weixin_42524100的博客 463

Java菜鸟教程 冒泡排序,时间复杂度和空间复杂度

最近,笔者学习了冒泡排序,在此简单分享一下。 冒泡排序的原理:         对于一个数组,冒泡排序算法会比较相邻的两项的大小,并进行交换。         对每一对相邻的元素做同样的调整,如:第一个和第二个,第二个和第三个,第三个和第四个等等,以此类推。这样下来,最后的元素会是最大的。         重复以上步骤。如果有n个元素,则第一次循环进行n-1次,第二次循环进行n-2次,……

thomasli2017的博客 1万+

Qoder + ADB Supabase :5分钟GET超火AI手办生图APP

本文介绍如何利用Qoder、阿里云 ADB Supabase 和通义千问图像编辑模型,快速构建AI手办生图Flutter应用。无需传统后端,通过AI生成代码、BaaS服务与边缘函数调用,实现从原型到上线的敏捷开发,全流程轻量高效,助力Vibe Coding落地实践。

数据库技术 931

HDU 5775 Bubble Sort(冒泡排序)

HDU5775BubbleSort(冒泡排序) TimeLimit:2000/1000MS(Java/Others)MemoryLimit:65536/65536K(Java/Others) ProblemDescription - 题目描述 Pisapermutationoftheintegersfrom1t...

188

Java的API帮助文档

JDK帮助文档 SUN公司为JDK工具包提供了一整套文档资料,我们习惯上称之为JDK文档。 JDK文档中提供了Java中的各种技术的详细资料,以及JDK中提供的各种类的帮助说明。 JDk文档是Java语言的完整说明,大多数书籍中的类的介绍都要参照它来完成,它是编程者经常查阅的资料 如何理解API:就当做是一个“字典”,“使用手册”,API就相当于是一个电子的帮助文档,可以帮我们查看JDK提供的类的信息,平时查看的时候可结合百度一起看。 官网下载: 1、登录Oracle官网(Oracl.

人生得意须尽欢 2万+

星载SAR的各项指标解读(史上最全)

一、系统指标 系统指标主要指雷达系统的通用的指标,以及和卫星整星相关的指标,主要有一下几项: 工作频段: 雷达体制: 极化方式: 设计s

9273

冒泡排序(Bubble Sort)

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 算法描述 比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素...

ThinkWon的博客 1万+

华为OD新系统机试真题 2026.5.10 - 美观的灯笼

华为OD新系统机试真题【美观的灯笼】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【美观的灯笼】

qq_45776114的博客 643

冒泡排序 (Bubble Sort)

定义 冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 冒泡排序算法的运作如下: 比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。 对每一对相邻元素...

weixin_42077402的博客 7672

【AI智能体】Codex 插件从使用到项目开发实战操作详解

Codex 插件从使用到项目开发实战操作详解

congge 7644

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

冒泡排序Bubble Sort

Niklaus Wirth: “程序=数据结构+算法”排序:将⼀组“⽆序”的记录序列调整为“有序”的记录序列。列表排序:将⽆序列表变为有序列表输⼊:列表输出:有序列表 ...

Python技术博文 492

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

qsort底层逻辑讲解,使用冒泡排序方法(bubble_sort)

众所周知,qsort方法是中的快速排序库函数,但是它的底层逻辑和需要传入的参数,让人摸不着头脑了,所以今天我会去讲解该函数的底层逻辑和参数的作用,还有为什么它可以排序所有类型的数据的原因。。cmp函数,这的cmp函数不是固定的,正如cmp_int是用来比较int类型的数据,这个cmp是函数指针了,指向的是cmp_int函数,

K1的博客 259

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

冒泡排序||Bubble Sort

冒泡排序||Bubble Sort 自我学习总结之冒泡排序(bubble sort) what? 这个算法的名字由来是因为越小/大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序” 摆原理 1、从第一个元素开始,比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2、对每一对相邻元素做同样的工作,从开始第一对到结尾...

qq_37577146的博客 275

冒泡排序 Bubble Sort

文章目录冒泡排序1. 基本原理2. 算法步骤3. 动画演示4. 参考实现5. 复杂度分析6. References 冒泡排序 1. 基本原理 依次比较相邻的两个元素,如果相邻的两个元素的顺序是错误的,则将它们交换,直至没有元素需要交换,排序完成。 在实现上有两种方法: 每一轮让未排序的最大元素交换到正确位置,以下称之为"最大冒泡" 每一轮让未排序的最小元素交换到正确位置,以下称之为"最小冒泡" ...

wylu 500

冒泡排序详解(Bubble Sort)

构造的过程就是将无序的序列构造成一个堆的过程。堆的定义是:对于任意一个非叶子节点 i,其左子节点为 2i+1,右子节点为 2i+2,且父节点的值大于等于(或小于等于)其子节点的值。因此,我们可以从最后一个非叶子节点开始,依次将其与其子节点比较,如果不满足堆的定义,则交换位置,直到整个序列构造成一个堆为止。排序的过程就是将堆顶元素与最后一个元素交换位置,然后将剩余元素重新构造成一个堆的过程。每次交换后,堆的大小减一,因此我们可以通过一个变量来记录堆的大小,从而将排序的过程限制在堆的范围内。

Wzill 1万+

在冒泡排序中,需要比较相邻的两个元素的大小,并决定是否需要交换。改写冒泡排序的程序,其中至少包含两个函数:bubble_sort(int a[], int n)和swap

这里是在冒泡排序中,需要比较相邻的两个元素的大小,并决定是否需要交换。改写冒泡排序的程序,其中至少包含两个函数:bubble_sort(int a[], int n)和swap,bubble_sort用于将数组a中的n个元素排序,其中调用函数swap来交换两个数 引用 #include <stdio.h> void swap(int *a,int *b){ int temp; temp=*a; *a=*b; *b=temp; } void bubble_sort (int a[],i.

JC_ZQ_Fighting的博客 573

冒泡排序——Bubble Sort

冒泡排序只会操作相邻的两个数据,每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。 冒泡排序是原地、稳定的排序。 原地:冒泡的过程只涉及相邻数据的交换操作,只需要常量级的临时空间,空间复杂度为O(1)。 稳定:在冒泡排序中,只有交换才可以改变两个元素的先后顺序。当有相邻的两个元素大小相等的时候,不做交换, 相同大小的数据在排序前后不后改变顺序。 时间复杂度:最好情况是有序...

DieJugend的博客 218

冒泡排序bubble sort

集合S = {s0, s1, ..., sn} 第一趟排序范围从s0到sn,相邻的两个数比较,如果升序排序则两个数交换位置,大的数排在小的数的后面;降序排序则相反。 集合进行第一趟比较后,最大的数排在最后的位置n; 第二趟排序范围从s0到sn-1,进行两两比较, 第二趟比较完后,最大的数排在倒数第二位置n-1; ... 排序的范围直到只剩下s0,则顺序就排好了。 public c

jjavaboy的专栏 705
上一篇: 选择排序-SelectionSort
下一篇: 基数排序-RadixSort
HelloCooper
博客等级 码龄11年 13粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值