冒泡排序及其加标识优化

本文探讨了冒泡排序的基本原理,并介绍了通过加标识进行优化的方法。通过实例展示了优化前后排序的结果,显示了优化对于提升排序效率的影响。
摘要由CSDN通过智能技术生成
//从左往右扫描数据,选择最大的数据放在最右边
//算法:比较相邻的两个数,如果左边的数大于右边的数就进行交换

#include <iostream>
using namespace std;
void BubbleSort1(int list[], int n);
void BubbleSort2(int a[], int n);
int main() {
    int a[] = {45,34,78,12,34,32,29,64,45,23};
    cout <<"原始:"<<endl;
    //原始冒泡排序
    BubbleSort1(a,10);
    for(int k=0;k<10;k++)  //输出排序后的数
    {
        cout <<a[k]<<" ";
    }
    cout <<endl<<endl;

    //优化的冒泡排序
    cout <<"优化后:"<<endl;
    BubbleSort2(a, 10);
    for(int k=0;k<10;k++)  //输出排序后的数
    {
        cout <<a[k]<<" ";
    }
    cout <<endl;
    return 0;
}

//常规的冒泡排序
void BubbleSort1(int list[], int n){  //需要两个循环
    //bool Swap;  //加标志以后不一定要扫描n-1次
    //n=10,i<9,扫描9次
    for(int i=0;i<n-1;i++) {//n为元素格式,n个数据扫描n-1遍,10个数是从0到8
        //Swap = false;
        for(int j=0;j<n-i-1;j++){  //n为10,第一遍扫描到8,比较9;第二遍扫描到7,比较8次;第三遍扫描到6,比较7次
            if(list[j] > list[j+1]) //如果左边元素大于右边
                std::swap(list[j],list[j+1]); //交换
                //Swap = true;
        }
        /*if(!Swap)
            return ; */
    }
}

//优化的冒泡排序
void BubbleSort2(int a[], int n){ //a[]为数组,n为数组长度
    bool Swap;                    //标识是否发生交换
    for(int i = 0;i<n-1;i++){    //外层扫描,n个数据扫描n-1次
        Swap = false;            //初始化标识,没有交换时,标识为假
        for(int j=n-1;j>i;j--){  //从后往前扫描
            if(a[j]<a[j-1]){     //如果右边的数小于左边的数,就交换
                std::swap(a[j],a[j-1]);
                Swap = true;     //交换后标识为真
            }
        }
        if(!Swap)    //如果没有发生交换,表示已经排好次序,算法结束
            return ;
    }
}

输出结果:

原始:
12 23 29 32 34 34 45 45 64 78 

优化后:
12 23 29 32 34 34 45 45 64 78 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值