冒泡排序 - C++分析实现

 

冒泡排序:

 

 

 

 

 

◆实例:农民选种子的时候会把所有的种子放到水里,颗粒饱满的下沉 ,颗粒不饱满的漂到上面这类似于一种冒泡排序。

 

 

 

 

 

 

 

◆特点:1:每次只能比相邻的两个元素

a[i]<a[i+1])相比

2:如果顺序不合适就交换

 

 


 

 

 

☞: 适合少量数据的情况,如果乱序 数据量大 最好不要用

 

 

 

 

 

 

 

◆:算法描述:

 

 

1:一轮比较所有相邻数据,如果顺序不对就发生交换; =>for(`````````````)

 

 

 

2:本轮只要发生了交换、就再来一轮如果没有发生交换排序成功。  =>先做后判断所以适合dowhile

 

 

 

 

 

 

 3: 算法优化,每次可以少比较一个比较的个数减一:

 

 

 

 

 

 

 

 

 

 

 

 

◆:代码:

#include <iostream> 
#include <ctime> 
using namespace  std; 
//算出运算所用事件 
 
//定义 BubbleSort 方法   
typedef  int    T; 
void    BubbleSort (T*  arr, int num) 
{ 
     //比较一组数据 如果出现了交换 则继续排序  直到没有出现则表示排序成功 
        //=> do while循环 
//定义标记 每一次循环的比较 
        bool    bDoSwap = false;  // 
    do { 
        bDoSwap = false; //每次循环设置默认为没有发生交换 
        //循环遍历 
        for ( int i =0; i<num-1; i++) 
        { 
            //大的后移 
            if(arr[i] > arr[i+1]) { 
                swap(arr[i], arr[i+1]); 
                //修改标记 
                bDoSwap = true; 
            } 
        } 
        //算法优化  令num - 1  因为每次比较结束后  最后一个是最大的 所以最后一个无需再次比较 
         num--; 
    }while(bDoSwap); 
} 
     
 
int main() 
{ 
    cout << "冒泡排序:"<<endl; 
 //定义102400长度的数组 越长越能计算所需世间   赋值 
    const int kNum = 10240; 
    T arr[kNum]; 
    for (int i=0; i<kNum; i++) 
    { 
        arr[i] = kNum - i; 
    } 
    time_t tStart = time(NULL); 
    BubbleSort(arr, kNum); 
    time_t tEnd = time(NULL); 
     
    cout<<"require time:"<<tEnd-tStart <<endl; 
    //打印前十个看看是否完成排序 
    for(int i =0; i<10; i++) 
    { 
        cout<<arr[i]<<"     "; 
    } 
    system("pause"); 
    return 0; 
 
} 
 

结果:

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值