冒泡排序

冒泡排序(Bubble Sort):首先将记录的第一个关键字和第二个的关键字比较,如果第一个比第二个大那么就交换第一个和第二个的位子,然后将第二个和第三个比较…以此类推知道将第n-1和第n个比较,那么这样一趟下来可以保证最大的一个记录“沉”到了最后面,这样在对第1到第n-1冒泡,一般第i趟冒泡到n-i+1,要循环n-1次。

比如说有记录:49  38  65 97 76 13 27

第一趟:

             第一次比较结果:38 49  65 97 76 13 27                 //将48和38比较,49比38大,交换位置

             第二次比较结果:38 49  65 97 76 13 27                 //将49和65比较,49比65小,位置不变

             第三次比较结果:38 49 65 9776 13 27

             第四次比较结果:38 49 65 76 9713 27

             第五次比较结果:38 49 65 76 13 9727

             第六次比较结果:38 49 65 76 13 27 97              //第一趟的结果,将最大97“沉”到了最后面

第二趟:

             第一次比较结果:38 49 65 76 13 2797

             第二次比较结果:38 49  65 76 13 27 97

             第三次比较结果:38 49 65 76 13 2797

             第四次比较结果:38 49  65 13 76 27 97

             第五次比较结果:38 49  65 13 27 7697              //第二趟比较过程中,只需要比较到倒数第二的位置,因为最后一个数一定是最大的,第二趟的结果,将倒数第二大的76“沉”到的后面

第三趟:

             第一次比较结果:38 49 65 13 27 76 97

             第二次比较结果:38 49  65 13 27 76 97

             第三次比较结果:38 49  13 65 27 76 97

             第四次比较结果:38 49  13 27 6576 97

第四趟:

             ……

第五趟:

            ……

第六趟

            ……

注意:在比较过程中如果某一趟没有发生位置交换,那么说明已经排好序,没有必要在进行下去

冒泡排序的时间复杂度为:O(n^2)

C++代码:

//冒泡排序 gavin 2012-3-24
void myBubbleSort ( int * arr , int len )
{
     bool isChange  =  true ;  //用来记录某一趟中是否发生了交换
     for  ( int i  =  0; i  < len - 1; i ++)  //控制
     {
         if (!isChange ) //如果没有交换说明已经排序好了
             break ;
        isChange  =  false ; 
         for  ( int j  =  0; j  < len -i - 1; j ++)
         {
             if  (arr [j ]  > arr [j + 1] )
             {
                isChange  =  true ;
                 int temp  = arr [j ];
                arr [j ]  = arr [j + 1] ;
                arr [j + 1= temp ;
             }
         }
     }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值