冒泡排序及其推理方法

/*

 

        5  4  3  2  1

 

 0 4  5  3  2  1

        4  3  5  2  1

        4  3  2  5  1

        4  3  2  1  5

 

 比较4

 

 1 3  4  2  1  5

        3  2  4  1  5

        3  2  1  4  5

 

 比较3

 

 2 2  3  1  4  5

        2  1  3  4  5

 

 比较2

 

 3 1  2  3  4  5

 

 

 比较1

 

 一共比较了多少轮?长度-1-1


`注意 :实际中应为写双层for循环时一般是以int i = 0;开始,所以轮数一般写为: i < length - 1

//求出长度

int length = sizeof(nums)/sizeof(int);

//遍历

for(int i = 0;i < length - 1;i++){}

如果 i <= length,那么 轮数的控制就要写为 i <=length - 1 - 1


 

 每轮比较的次数 长度 - 轮数 - 1

 

 

*/


#include <stdio.h>


int main(int argc, const char * argv[]) {

   

    

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

    

    int nums[] = {5,4,3,2,1};

    

    int len = sizeof(nums) / sizeof(int);

    

    for (int i=0; i<len; i++) {

        

        printf("%d\n",nums[i]);

    }

    

    printf("-------以上是交换之前--------\n");

    

    for (int i=0; i<= len-1-1; i++) { //相当于 i<=3 i= 0,1,2,3


        for (int j=0; j<len-i-1; j++) {//相当于 j<=5-0-1; j<4   0 1 2 3

            

            if(nums[j] > nums[j+1] ){//如果当前遍历到的数字>下一个数字

             

                int temp = nums[j];

                

                nums[j] = nums[j+1];//j的位置,变成了下一个位置的元素

                

                nums[j+1] = temp;//把下一个位置的元素变成了J的元素

            }

        }

        

    }

    

    for (int i=0; i<len; i++) {

        

        printf("%d\n",nums[i]);

    }

    

    

    

    return 0;

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值