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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

冒泡排序的思想:
    升序排列:从第一个元素开始,对数组中两两相邻的元素比较,将值较小的元素放在前面,值较大的元素放在后面,一轮比较完毕,一个最大的数沉底成为数组中的最后一个元素,一些较小的数如同气泡一样上浮一个位置。n个数,经过n-1轮比较后完成排序。
(大数下沉,小数上浮)
假定有下标为0~n的n+1个数的序列,要求按升序排列,实现的步骤如下:
    (1)从第0个元素开始与后一个比较,如果比后大两元素交换,依次比较到第n个元素,最终将最大的数换入第n个元素中,a(n)不动
    (2)重复(1) ,依次比较到第n-1个元素,最终将最大的数换入第n-1个元素中,a(n-1)不动
    (3)重复(1) ,依次比较到第n-2个元素,最终将最大的数换入第n-2个元素中,a(n-2)不动
………………………………………
(n)a(0)与a(1)比较,如果a(0)大,与a(1)交换, a(0)最小

算法剖析:
(1)n+1个元素从头依次比较,冒出最大的元素到a(n),  ...a(n)不动
a(0) a(1) a(2)…a(n-2) a(n-1) a(n),共做n次比较
(2) n个元素从头依次比较,冒出最大的元素到  a(n-1), .a(n-1)不动
a(0) a(1) a(2)…a(n-2) a(n-1),    共做n-1次比较
(3) n-1个元素从头依次比较,冒出最大的元素到a(n-2), .a(n-2)不动
a(0) a(1) a(2)…a(n-2),          共做n-2次比较
………………………………………
………………………………………
(n)2个元素比较,冒出最大的元素到a(1), .            a(0)a(1)不动
a(0)a(1),                     共做1次比较
共进行了n轮比较
显然这里涉及两个主要变量,冒泡轮数和比较次数,设从第1个元素开始比较直到把大数换到第i个元素为一轮,即每一轮

显然以上都是啰嗦模式:
根据军训经验,第一课时,教官:“向左看齐,海拔高的往前,……”,以上冒泡排序以讲完。
函数实现一组数据冒泡排序:
void MaoPao( int  a[],int len){
    int temp=0;
    for(int i=0; i<len-1; i++){
        for(int j=0; j<len-1-j; j++){
            if(a > a[i+1]){ temp=a; a=a[i+1]; a[i+1]=temp; }
        }
    }
}
int main(){
    int b[10]={1,23,34,56,441,123,198,388;669,89};
    MaoPao(b, 10);
    for(int i=0; i<10; i++){
        printf("%d\t",a);
    }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马