C语言实现冒泡排序算法(升序)



总结:

 

1、冒泡排序有二种顺序来排序的。有升序或者降序来进行冒泡排序(注意万一在面试中,面试官有问到冒泡排序,要问清楚面试官是用什么顺序来进行冒泡排序的)这里默认是用升序来进行排序的。

 

2、冒泡排序思路(第一层)是先从第一个数开始冒泡(对应数组中的a[0]的值),然后与第二个数进行比较(对应数组中的a[1]的值)。

       a.假如a[0]>a[1],a[0]a[1]交换位置。小的值放在前面,大的值放在后面。也就说a[1]的位置现在放在第一位了,而a[0]的放在在第二位,但是a[0]继续与后面的数值进行比较。道理和a[0]a[1]的过程一样。直到找出该数组的最大的值。并把这个最大值放在最后面的位置。第一层排序结束。

   

       b.假如a[0]<a[1],a[0]a[1]不交换位置。第一个if条件没有执行。然后j++,然后变成a[1]与它相邻的右边的a[2]进行比较,以次类推,直到第一层排序结束,并把最大的值冒泡到最尾的位置。

 

3、每层的冒泡排序,都是把最大值往右移,在第一层执行完后,已经把最大值固定在最后面的位置,所以在第二层冒泡的时候,执行j--2步。第三层,第四层....都是在原来基础上-1

 

4、全部数据按升序顺序冒泡排好后,最后用for循环输出数据。

5、注意事项:核心思想是两个嵌套for循环。第一个for循环控制层数fori=0i<ni++)(n是数组里数据的个数)。第二个for循环控制这层里面的数据交换的次数forj=0j<n--i;j++)(i的值会增大,因为随着你每一次都遍历完成后,就固定了最大的值。不必要再与这个最大值比较了。所以在第二个for循环里面的循环的次数会变少)。

6、菜鸟一枚。有什么不对的地方。还请大家多多海涵。并恳求大家帮指出来。

     

代码如下:

 

#include<stdio.h>

int main(){

   int a[8] = {33,27,58,98,77,56,11,9};

   int i,j;

   int temp;

   for(i=0;i<=7;i++){

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

        if(a[j]>a[j+1]){

            temp = a[j];

            a[j] = a[j+1];

            a[j+1] = temp;

        }

     }

   }

   for(i=0;i<=7;i++){

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

   }

   return 0;

}




  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值