A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一步步往上爬 中级黑马   /  2016-1-15 00:52  /  739 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

冒泡排序:

简单来说就是把一个数组中的元素,按照从小到大(从大到小)的顺序进行重新排列,使数组的元素从第一个到最后一个的值都是越来越大(越来越小)的

  比如说有一个数组

int nums[] = {5,543,23,12,1};

  经过冒泡排序后

那么数组中的每个元素变成了

1 5 12 23 543

实现思路:就是两个元素两两比较,小的放后面,大的放前面

比如说有个数组:元素设置为

  下标:0  1  2  3  4

--------------------------------

5  4  3  2  1

4  5  3  2  1

一共比较4次

第一轮:4  5  3  2  1    0跟0+1比较后的结果

4  3  5  2  1   1跟1+1比较后的结果

4  3  2  5  1   2跟2+1比较后的结果

4  3  2  1  5   3跟3+1比较后的结果

一共比较3次

第二轮:3  4  2  1  5

3  2  4  1  5

3  2  1  4  5

一共比较2次

第三轮:2  3  1  4  5

2  1  3  4  5

一共比较1次

第四轮:1  2  3  4  5

  外面一个大的循环用来控制轮数(到底循环多少轮?)

长度-1轮

每轮里面又有一个循环控制一共比较的次数 (每轮里面又比较多少次呢?)

长度 - 轮数(轮数从1开始的)

如果轮数从0开始, 长度 - (轮数+1)

长度 - 轮数 - 1

for(int i=0;i<5-1;i++){//外层循环控制轮数,但是这个轮数从0开始

for(int j=0;j<5-i-1;j++){//比较次数

if( nums[j] > nums[j+1] ){ //判断当前的元素是否比下一个元素大

//交换这两个元素
int temp = nums[j];

nums[j] = nums[j+1];

nums[j+1] = temp;

}

}



}

例子:

#include <stdio.h>

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

    int arr[] = {25,12,36,4,6,5,8,456,565,4255,45,54};

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

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

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

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

                int temp = arr[j];

                arr[j] = arr[j+1];

                arr[j+1] = temp;

            }

        }

    }

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

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

    }

    for (int i = length -1; i >= 0; i--) {

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

    }

    return 0;

}

1 个回复

倒序浏览
受教了,!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马