首页 > 其他分享 >手把手教你掌握冒泡排序思路

手把手教你掌握冒泡排序思路

时间:2023-04-27 22:05:06浏览次数:35  
标签:tmp sz arr int 手把手 元素 冒泡排序 ++ 思路

完整代码:

#include <stdio.h>

bubble_sort(int arr[], int sz)

{

int i = 0;

int j = 0;

for(i = 0; i < sz - 1; i++)

{

for(j = 0; j < sz - 1 - i; j++)

{

if(arr[j] > arr[j + 1])

{

int tmp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = tmp;

}

}

}

}

int main()

{

int arr[10] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 } ;

int sz = sizeof(arr) / sizeof(arr[0]);

int i = 0;

bubble_sort(arr, sz);

for(i = 0; i < sz; i++)

{

printf("%d ", arr[i]);

}

return 0;

}


核心思想

将相邻的两个元素进行比较,如果顺序是错的,就交换两个元素的位置,直到所有元素的顺序都正确。

举例分析

现要求将数组 int arr[ 5 ]  =  {  3,  1,  5,  9,  2  }排成升序

过程演示:

一次排序

因为3比1大,不满足升序,所以3和1进行位置交换


int tmp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = tmp;


一趟排序

一共要排4对元素

手把手教你掌握冒泡排序思路_升序

数组里面有五个元素,就需要比较四组

令sz为数组中元素的个数

所以在循环中比较的次数就为sz - 1

int sz = sizeof(arr) / sizeof(arr[0]);

for(j = 0; j < sz - 1; j++)

{

if(arr[j] > arr[j + 1])

{

int tmp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = tmp;

}

}


这一趟后,我们将最大的9放到了最后面,这也就意味着,每一趟交换都会使得最少一个元素放在了正确的位置

一趟  ——> 一个正确位置

四趟  ——>五个正确位置

(因为当四个位置都正确的时候,剩下的哪一个就也是正确的了)

为了把数组全都摆到正确的位置上,一共要进行sz-1趟(sz为数组中元素的个数)


for(i = 0; i < sz - 1; i++)

{

for(j = 0; j < sz - 1; j++)

{

if(arr[j] > arr[j + 1])

{

int tmp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = tmp;

}

}

}


运行结果:

手把手教你掌握冒泡排序思路_i++_02

如果本篇文章对你有帮助的话,麻烦点个赞谢谢

如有错误或改进,欢迎指正

标签:tmp,sz,arr,int,手把手,元素,冒泡排序,++,思路
From: https://blog.51cto.com/u_15992651/6232137

相关文章

  • 求素数思路
    “求素数”一类的题多用筛选法。其具体算法如下:从2开始把连续的整数放入筛中,首先确定筛中第一个数2是素数。并从筛中晒去所有2的倍数(不包括2);然后从2以后开始查找,找到筛中剩下的第一个数,它也是素数,并从筛中筛去它的所有倍数(不包括本身)。如此反复执行,直到无数可筛为止。这时筛中剩......
  • 实战项目-美多商城(七)订单 设计思路整理
    模型设计模型设计:订单信息应该包含那些字段-订单号:order_id-下单用户:user-下单用户收货地址:address-商品总数:total_count-商品总价:total_amount-运费:freight-支付方式(本项目两种):pay_method -支付宝 -货到付款-订单状态(6种):st......
  • 借助尾号限行 API 实现限行规则应用的设计思路分析
    引言尾号限行是指根据车牌号的末尾数字,规定某些时段内不能在特定区域行驶,这是城市交通管理的一种措施。尾号限行政策的实施可以缓解城市交通拥堵问题,减少环境污染和交通事故等问题。尾号限行API是一种提供已知所有执行限行政策的城市(如中国大陆等地)未来一段时间内机动车尾号限......
  • 手把手教你对抓取的文本进行分词、词频统计、词云可视化和情感分析
    今日鸡汤苍苍竹林寺,杳杳钟声晚。大家好,我是Python进阶者。前言前几天星耀群有个叫【小明】的粉丝在问了一道关于Python处理文本可视化+语义分析的问题,如下图所示。他要构建语料库,目前通过Python网络爬虫抓到的数据存在一个csv文件里边,现在要把数据放进txt里,表示不会,然后还有后面的......
  • Java8使用Stream API转换Map遇到的2种异常报错和解决思路
    问题java8提供了StreamAPI,配合Lambda表达式,让开发者能对集合对象进行便利、高效的操作。在日常业务开发中,有个经常用到的场景是将List类型对象转换为Map类型对象,方便后续操作。在java8之前,这种转换需要先new一个Map对象,遍历list然后通过Map#put来初始化。使用java8后,可方便的......
  • 8冒泡排序
    #include<iostream>usingnamespacestd;#defineN10intmain(){ intarr[N],a,k,i,j,count; cin>>a; for(i=0;i<a;i++){ cin>>arr[i]; } for(i=0;i<a;i++){ for(j=i+1;j<a;j++){ k=arr[j]; if(k<arr[i]){ arr[j]=arr[i]; arr[i]=......
  • c语言趣味编程(8)冒泡排序
    一、问题描述对n个整数进行升序排列(数据由键盘键入)二、设计思路(1)读取从键盘键入的n个数据,存入数组a中;(2)用for循环对数组a中的数据进行遍历,并用if语句来判断大小,按从小到大存入;(3)遍历输出数组中已经完成升序排列的数组元素;三、程序流程图 四、伪代码五、代码1#include......
  • 架构思路
    作为一个Java架构师,负责设计一个项目的后端代码开发框架,要首先了解业务需求,然后按照以下步骤进行设计和实施。创建项目结构:使用SpringInitializr或者IDE(如:IntelliJIDEA)创建基于SpringBoot的项目,选择适合的依赖,如:Web(SpringMVC),Mybatis(或JPA),MySQL(或其他数据库驱动),Redis,SpringS......
  • questions_01:500 Internal Server Error 解决思路
    500InternalServerError问题如何解决?结果令人啼笑皆非问题出现场景register.html:在利用ajax发送请求之后,我们手机会收到短信验证码,并且前端会收到后台的一个返回值,此时在我们的页面就要开始验证码倒计时,不知道什么原因就是显示不出来,后台运行代码也没报错,短信也是正常收......
  • 冒泡排序
    问题描述:对N个整数(数据由键盘输入)进行升序排列。这里采用五个数。代码如下:#include<iostream>#include<vector>usingnamespacestd;intmain(){ inta[5],t; for(inti=0;i<5;i++){ cin>>a[i]; } for(inti=1;i<=4;i++){ for(intj=0;j<......