冒泡排序及其推理方法

来源:互联网 发布:淘宝买家贷款5万怎么贷 编辑:程序博客网 时间:2024/05/01 06:15

/*

 

        5  4  3  2  1

 

 04  5  3  2  1

        4  3  5  2  1

        4  3  2  5  1

        4  3  2  1  5

 

 比较4

 

 13  4  2  1  5

        3  2  4  1  5

        3  2  1  4  5

 

 比较3

 

 22  3  1  4  5

        2  1  3  4  5

 

 比较2

 

 31  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
原创粉丝点击