首页 > 编程语言 >C++冒泡排序简单讲解

C++冒泡排序简单讲解

时间:2023-04-16 09:44:30浏览次数:44  
标签:数列 int 元素 走访 C++ 冒泡排序 讲解 排序

什么是冒泡排序

冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。
这段话引用自菜鸟教程

冒泡排序的基本思想

重复地走访要排序的元素列,依次比较两个相邻的元素,如果他们的顺序错误就把他们交换过来。
走访元素的工作要重复地进行,直到没有相邻元素需要交换时,说明全部元素已经排序完成。
走访的元素———比作是一个“气泡”,“气泡“一步一步向上翻滚,完成排序。

冒泡排序的可视化动画image

代码展示

从大到小排序

#inlcude <iostream>
using namespace std;
int main(){
	int a[101];
	int n;
	cin>>n;
	for(int i = 1;i<=n;i++){
		cin>>a[i];
	}
	//每趟排好一个数字,第一趟结束把最大值排好到最后一位
	for(int k = 1;k <= n-1;k++){
		for(int i=1;i<=n-k;i++){
			if(a[i]>a[i+1]){//顺序错误
				swap(a[i],a[i+1]);
			}
		}
	}
	for(int i=1;i<=n;i++){
		cout<<a[i]<<" ";
	}
}

从小到大排序

#inlcude <iostream>
using namespace std;
int main(){
	int a[101];
	int n,flag;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	//一共n-1趟
	for(int k=1;k<=n-1;k++) {
		//每趟排好一个数字,第一趟结束把最大值排好到最后一位
		flag=0;
		for(int i=1;i<=n-k;i++){
			if(a[i]>a[i+1]){//顺序错误
				swap(a[i],a[i+1]);
				flag=1;
			}
		}
		if(flag==0){ //这趟排序中没有出现交换
			break;//说明已经排好序了,break终止循环
		}
	}
	for(int i=1;i<=n;i++){
		cout<<a[i]<<" ";
	}
	return 0;
}

}

标签:数列,int,元素,走访,C++,冒泡排序,讲解,排序
From: https://www.cnblogs.com/hujiaohuxue8-bilibili/p/CppBubbleSort.html

相关文章

  • 金额查错C++
    一、题目题目描述某财务部门结账时发现总金额不对头。很可能是从明细上漏掉了某1笔或几笔。如果已知明细账目清单,能通过编程找到漏掉的是哪1笔或几笔吗?如果有多种可能,则输出所有可能的情况。输入描述用户输入的第一行是:有错的总金额。接下来是一个整数 n,表示下面将要输......
  • C++20 Corountine
    背景C++20内引入了 co_yield,co_await,co_return三个关键字。任何函数在使用了这三个关键字中的任何一个后,都会被编译器视作协程函数,进行一些特殊编译处理。协程介绍协程其实就是用户态的线程(粗略的定义),协程的切换完全是在用户态进行,不需要陷入到内核态,因此切换的开销远......
  • 恶意代码分析实战 lab 20-1 20-2 20-3 C++恶意代码分析
    本次实验我们将会分析lab20-1,lab20-2文件。先来看看要求解答的问题Lab20-1需要回答的问题如下Q1.在0x401040处的函数采用了什么参数?Q2.哪个URL被用来调用URLDownloadToFile?Q3.这个程序做了什么事情?Lab20-2需要回答的问题如下:Q1.在这个程序中,你可以从有趣的字符串中了......
  • C/C++运动场馆预订管理系统[2023-04-15]
    C/C++运动场馆预订管理系统[2023-04-15]题目14:运动场馆预订管理系统对旅游管理进行简单模拟。运动场地管理:包括场地名称(如羽毛球场A、乒乓球场B等)、开放时间、计费时长、价格。注意:场地可能增减、同一场地的租金在不同时间段可能不同。用户信息管理:包括用户姓名、联系方式等信......
  • Linux内核Socket通信原理和实例讲解
    关于对Socket的认识,大致分为下面几个主题,Socket是什么,Socket是如何创建的,Socket是如何连接并收发数据的,Socket套接字的删除等。Socket是什么以及创建过程一个数据包经由应用程序产生,进入到协议栈中进行各种报文头的包装,然后操作系统调用网卡驱动程序指挥硬件,把数据发送到......
  • C++课本第三章课后习题 3-7
    完成函数,参数为两个unsigned short int 型数,返回值为第一个参数除以第二个参数的结果,数据类型为short int;如果第二个参数为0,则返回值为一1。在主程序中实现输入输出。#include<iostream>usingnamespacestd;shortintnumber(unsignedshortintx,unsi......
  • C++中的虚函数表实现机制——对于虚表的内存布局讲解得非常好
    C++中的虚函数表实现机制摘自:https://blog.twofei.com/496/前言大家都应该知道C++的精髓是虚函数吧?虚函数带来的好处就是:可以定义一个基类的指针,其指向一个继承类,当通过基类的指针去调用函数时,可以在运行时决定该调用基类的函数还是继承类的函数.虚函数是实现多态(......
  • 【小程序】微信小程序基础语法讲解(一)
    目录一、概述二、小程序代码组成1)JSON配置2)WXML模板1、WXML模板常用标签2、view标签与block标签的区别3、条件控制1、wx:if条件控制2、wx:if/else条件控制3、wx:for循环3)WXSS样式4)JS(JavaScript)逻辑交互1、生命周期函数2、事件函数3、双向绑定三、目录结构四、Page构造......
  • 内存对齐详解 (C++代码)
    内存对齐详解(C++代码)目录内存对齐详解(C++代码)Test1:结构体对齐Test2:时间开销对比我每天都有读一下面经的习惯,从里面抽一些我不太懂的内容使用dfs的思想去探索,感谢有了GPT4,探索之路变得有趣和高效许多。今天这个Topic如下,是腾讯日常实习面经中的内容编译内存相关:C+......
  • c++20协程实现await及suspend效果
    例子是掌握c++20协程的的起点,网上很多的协程资料说的很复杂,但是例子举得都太差劲了,我这里写了一个可以await与suspend的列子。1.协程的基本框架//suspend.cpp#include<chrono>#include<coroutine>#include<functional>#include<iostream>#include<memory>#include......