什么是冒泡排序?

  冒泡排序是我在排序学习中学到的第一种排序算法,也是一种相对简单但是效率相对低下的排序算法。

言归正传,什么是冒泡排序?

  在一串没有经过排序的数字中,从头(尾)起,依次向另一端进行排序。

  假设要对一串无序数组进行从大到小的排序,我们可以从后往前依次比较相邻的两个数,如果后面那个数大于前面那个数字,就将这两个数交换,直到做到整个数组的第一个数字为止,因此第一个数字便是我们在整个数组中所得到的最大数字。

  对于第二次排序,我们仍然重复以上步骤,但是我们只要做到整个数组的第二个数字即可(因为第一次排序将整个数组的最大的元素放置于数组之首,第二次从数组末尾冒泡到数组的第二个元素,可获得第二大的元素并将其放置于数组的第二个位置)...依次类推直到整个数组从大到小排列。

演示:

未排序数组: 8 11 25 6 3 7 10 5

第一次排序后:25 8 11 10 6 3 7 5

第二次排序后:25 11 8 10 7 6 3 5

第三次排序后:25 11 10 8 7 6 5 3

第四次排序后:25 11 10 8 7 6 5 3

第五次排序后:25 11 10 8 7 6 5 3

第六次排序后:25 11 10 8 7 6 5 3

第七次排序后:25 11 10 8 7 6 5 3

其实我们可以发现,这串数组仅仅经过了三次排序,变达到了从大到小排列的目的,但是并不是每个数组都是如此,在最坏的情况下,对n个元素的数组进行排序,我们需要进行(n-1)次排序。

代码演示:

#include <stdio.h>
void  bubble(int a[]);	
int main(int argc, const char * argv[]) {
    int a[8];	//a为待排序数组,共有八个元素
    printf("Enter 8 numbers:");
    for(int i = 0; i<8; i++){
        scanf("%d",&a[i]);
    }
    bubble(a);
    for(int i = 0;i<8; i++){
        printf("%d  ",a[i]);
    }
    return 0;
}
void bubble(int a[]){	//对数组进行冒泡排序
    for(int i = 0; i<8; i++){
        for(int j = 7; j>i; j--){
            if(a[j]>a[j-1]){	//对相邻数字进行换数操作
                int t = a[j];
                a[j] = a[j-1];
                a[j-1] = t;
            }
        }
    }
}

冒泡排序法从效率上来讲并不是很高,实际需要的排序时间也很长,特别是在数据量很大情况下更是耗费时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值