【原创】双向冒泡排序

本文介绍了一种双向冒泡排序算法的C++实现方法。该算法通过从数组两端同时进行比较和交换来提高传统冒泡排序的效率,并提供了一个完整的示例程序,包括随机数组的生成和排序结果的展示。
//双向冒泡 bubble sort 
#include <iostream>
#include <ctime>
#define MAX 1000
#define N 10
using namespace std;
void bubble(int* a,const int& len);
inline void swap(int& x,int& y);
int main(int argc,char* argv[])
{
      srand((unsigned)time(0));    
      int a[MAX],n[N];   
      for(int i=0;i<MAX;i++)
            a[i]=i;
      for(int i=0;i<N;i++)  //产生一个无序数组 
      {
            int k=rand()%(MAX-i);  
            n[i]=a[k];
            swap(a[k],a[MAX-i]);
            cout <<n[i] <<" ";
      }  
      cout <<endl;
      bubble(n,N);    
      system("pause");
      return 0;
}
 
void bubble(int* a,const int& len)  //双向冒泡排序 
{ 
    int left=0,right=len-1,count=0;
    while(left<right)
    {
        for(int i=0;i<len-1-i;i++)
        {
            int top=i,end=len-1-i; 
            count++;   
            //比较大的数往后移 
            if(a[top]>a[top+1]) swap(a[top],a[top+1]);
            //比较小的数往前移 
            if(a[end]<a[end-1]) swap(a[end],a[end-1]);    
        } 
        left++;
        right--;            
    }
    for(int i=0;i<=len-1;i++)
       cout <<a[i] <<" ";
    cout <<endl <<"循环了:" <<count <<"次" <<endl;
}
 
inline void swap(int& x,int& y) //交换x,y 
{
     int temp=y;
     y=x;
     x=temp;
}

转载于:https://www.cnblogs.com/mx113/archive/2009/11/19/1606299.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值