C++ 冒泡排序.cpp

本文介绍了C++实现冒泡排序的方法,重点解析了冒泡排序的特点和时间复杂度。冒泡排序对数据有序性敏感,最优情况下时间复杂度为O(n),最坏为O(n^2)。关键在于flag标志位,它能允许算法在数据已排序时提前终止,提高效率。

冒泡排序.cpp

特点:对数据的有序性敏感,一旦排序完成就能停止。
时间复杂度: 最优:O(n) 最差:O(n^2)
解读:冒泡算法核心点在于 flag 。可以提前结束排序,若没有这个标志位 ,这个算法没有任何优点。

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    // 待排序数组
	int arr[9]={3,5,2,6,7,8,1,4,0};
	int len = sizeof(arr)/sizeof(arr[0]);  //数组长度
    // 排序前状态
    cout << "排序前:" << endl;
    for (int i = 0; i < len; i++)
    {
        cout << arr[i] << endl;
    }
    
    // 排序过程
	bool flag = true;		//冒泡特点 标志位
    for (int i = len - 1; i > 0 && flag; i--)
    {
    	flag = false;	//置假
        for (int j = 0; j < i; j++)
        {
            if( arr[j] > arr[j+1] )
            {
                int t = arr[j+1];
                arr[j+1] = arr[j];
                arr[j] = t;
                flag = true; //如果没有进这个循环则说明前面都是有序的 提前结束排序
			}
		}
	}
    
    // 排序后状态
    cout << "排序后:" << endl;
    for (int i = 0; i < len; i++)
    {
        cout << arr[i] << endl;
    }
}

函数形式

void bubble_sort(int* arr,int len)
{
	bool flag = true;		//冒泡特点 标志位
	for(int i=len-1; i>0 && flag; i--)	//从最后一位开始
	{
		flag = false;	//置假
		for(int j=0; j<i; j++)	//从第头开始 到i 
		{
			if(arr[j]>arr[j+1])	//当前为大于后一位则交换 大数放后面位置  
			{
				int t=arr[j+1];
				arr[j+1]=arr[j];
				arr[j]=t;
				flag = true;		//如果没有进这个循环则说明前面都是有序的 提前结束排序
			}
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值