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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一步步往上爬 中级黑马   /  2016-1-10 01:35  /  1195 人查看  /  5 人回复  /   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;
}

5 个回复

倒序浏览
很详细                                                            
回复 使用道具 举报
总结得很详细。
回复 使用道具 举报
赞一个!!
回复 使用道具 举报
不做伸手党
回复 使用道具 举报
今天刚学的冒泡排序  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马