您的位置:首页 > 其它

冒泡排序及其推理方法

2015-10-26 20:40 246 查看

/*

 

        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;

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: