首页 > 其他分享 >冒泡排序(数组中的问题)

冒泡排序(数组中的问题)

时间:2022-11-12 10:01:07浏览次数:49  
标签:tmp sz arr int 冒泡排序 问题 数组

问题:使用冒泡排序的方法,将数组中的元素按照升序的方式将其排列。

冒泡排序核心思想:两两相邻元素进行比较,满足条件则交换;

      ① 先确认趟数;

      ② 写下一趟冒泡排序的过程;

      ③ 最后进行交换;

#include<stdio.h>

void  bubble_sort(int arr[],int sz)  //这里不需要返回,所以不选择int

{

int i=0;

for(i=0;i<sz-1;i++)     //计算出冒泡排序的趟数

{

int j=0;

for(j=0;j<sz-i-1;j++)   //计算出每一趟所要比较的对数

{

if(arr[j]>arr[j+1])     //if语句在这里实现的是交换值的大小

{

int tmp=arr[j+1];

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

arr[j]=tmp;

}

}

}

}

int  main()

{

int i=0;

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

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

bubble_sort(arr,sz);        //函数传参,传过去的是arr数组首元素的地址

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

{

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

}

return  0;

}

以上代码 ,不难看出,当数组中的元素无序时,此方法较为合理。当元素有序时,此方法是不是有点繁琐呢?

因此代码可进行优化,如下:

只需将函数声明部分做一下修改;

void  bubble_sort(int arr[],int sz)  

{

int i=0;

int flag=1;//假设这一趟排序的数组已经有序

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

{

int j=0;

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

{

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

{

int tmp=arr[j+1];

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

arr[j]=tmp;

flag=0;//本趟排序的数据其实不完全有序

}

}

if(flag==1)

break;

}

}


















标签:tmp,sz,arr,int,冒泡排序,问题,数组
From: https://blog.51cto.com/u_15806064/5846537

相关文章

  • 那些年被误解的指针和数组
    误解1:&运算符返回一个地址解释:  &叫做取址运算符,运算的结果是返回一个指向某个数据类型对象的指针。    inta=1; int*p=&a;       &a不是地址,&a是......
  • 回溯算法解数独问题
    好久没写算法了,浅解个数独本篇代码以伪代码为主,主要讲解解题思路规则介绍:首先数独的游戏规则,每个九宫格每一行每一列每个数字只能出现一次(1-9)开局时会生成一些不......
  • C++二维数组最大值
    C++二维数组最大值【问题描述】求二维整型数组的"最大点"。二维数组的"最大点"定义为:某个数是所在行的最大值,并且是所在列的最大值。注意:某行或某列上可能有多个"最大点"......
  • Spring 事务扩展及分布式事务可见性问题
      大家注意点,这个@Transactional其实在两种情况下会失效的:第一种就是:在方法内调用的时候,因为它没有经过Bean的代理,所以它没办法依赖Spring的AOP增强去进行事务的控......
  • 子数组、子序列,子串、子序列,子段的简单区别
    关系图表数组中的子数组、子序列,子段以及字符串的子串、子序列解释类型名称连续性数组子数组连续子段连续子序列不一定连续字符串子串连续子......
  • js中foreach嵌套遍历两个数组并输出新的数组
    <script>letarrA=['1','2','3','4','5']letarrB=['2020-10-1','2020-10-2','2020-10-3']letarrC=[]arrA.forEach(item1=>{arrB.forEach......
  • 数组中出现次数超过一半的数字
      import java.util.*;public class Solution {    public int MoreThanHalfNum_Solution(int [] array) {        //遍历数组,值标记位key......
  • parcel segmentation fault 问题以及解决方法
    parcel是一个很不错的all-in-one的简单工具,可以方便web构建,因为使用mac构建没有发现问题,但是在linux上运行的时候发现是有问题的,出现了段错误问题,尝试了几种解决方......
  • Linux yum 无法找到命令的问题
    当遇到这种问题的时候,可以选择重新安装yum,这样的方式会更快捷一点。我们可以去找到阿里云镜像源(https://mirrors.aliyun.com/centos/),再根据自己CentOS的版本进入os/x86......
  • 算法笔记(三):数学问题
    最大公约数辗转相除法intgcd(inta,intb){ if(b==0)returna; returngcd(b,a%b);}最小公倍数根据最大公约数得出最小公倍数步骤:先求得a与b的最大公......