C语言冒泡排序

本文详细解释了冒泡排序的工作原理,包括排序过程中的趟数、轮数和判断条件,并提供了C语言的代码示例,展示了如何从小到大对数组进行排序。
摘要由CSDN通过智能技术生成

冒泡排序解析:

我们先来定义一个数组arr[5],元素分别是{10,9,5,4,3},冒泡排序的“冒泡”就是将数字小的排到顶部,将数字大的沉底。 

第零趟第一趟第二趟第三趟第四趟
109543
95434
54355
43999
310101010

以第零趟与第一趟之间举例:

第零轮第一轮第二轮第三轮第四轮
109999
910555
551044
444103
333310

第一轮排序将第一位“10”和第二位“9”比较,“10”沉底。第一轮比较时第一位变成“9”,第二位变成“10”。

第二轮排序将第二位“10”与第三位“5”比较,“10”沉底。第二轮比较时第二位变成“5”,第三位变成“10”。

第三轮与第四轮同上,依次进行第三四位和四五位的比较,这样我们就完成了“第一趟”排序,此时我们知道第五位数字是数组中最大的,那么我们就不需要对四五位进行比较了。

第一趟排序得知第五位最小,那么第一趟与第二趟之间四五位不需要比较,一共三轮

第二趟排序得知第四五位最小,那么第二趟与第三趟之间四五位和三四位不需要比较,一共两轮

代码展示:

#include<stdio.h>
int main(){
int arr[5]={10,9,5,4,3};
int i=0,n=0,t=0;//定义一个替换变量t
for(i=0;i<4;i++){//趟数
  for(n=0;n<4-i;n++){//轮数(每一趟就会少一个对比的数)
    if(arr[n]>arr[n+1]){//设立判断条件,决定升序还是降序
      t=arr[n+1];
      arr[n+1]=arr[n];
      arr[n]=t;
      }
    }
  }
for(i=0;i<5;i++){
  printf("%d ",arr[i]);//输出看下结果
  }
}

我们看一下输出结果:

冒泡排序规律:

 冒泡序列大致分为三层:(假设一共排序x位数字)

第一层:一共进行几趟排序(趟数i=x-1次)

第二层:趟与趟之间进行几轮比较(轮数n=x-1-i次)

第三层:判断条件,决定升降序。(需要引入一个替代变量)

冒泡排序的情况:

1.函数形式:

比较十个数的大小,并将他们由小到大排序。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int function(arr[],size){
int i,n,x,num;
size=sizeof(arr)/sizeof(arr[0]);
for(i=0;i<size-1;i++){
  for(n=0;n<size-1-i;n++){
    if(arr[n]>arr[n+1]){
      x=arr[n+1];
      arr[n+1]=arr[n];
      arr[n]=x;
      num=1;
      }
    if(num==0){
      break;//如果没有排序就说明排序完毕
      }
    }
  }
}
int main(){
int x,y,z;
int arr[10]={0};
for(z=0;z<10;z++){
  scanf("%d",&arr[z]);//给数组arr输入10个数字
  }
function(arr[10],x);//调用function函数
for(y=0;y<10;y++){//打印排序好的数组
  printf("%d ",arr[y]);
  }
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值