冒泡排序法

本文介绍了冒泡排序的基本概念,提供了冒泡排序的伪代码和C++实现,并分析了其时间复杂度为O(N^2),适合小规模数据排序。此外,还提及冒泡排序的交换次数可反映数列错乱程度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 冒泡排序了解

冒泡排序法就是让数组元素像水中的气泡一样逐渐上浮,进而达到排序的目的。

流程图:
在这里插入图片描述

二 冒泡排序伪代码实现

bubbleSort(A,N)
{
   flag=1  
   i=0;  //未排序部分的起始下标,因为每次遍历排序都会增加一个元素到排序部分
   while flag
   {
      flag=0;
      for j 从N-1到i+1
      {
         if(A[j] < A[j-1])
         {
            A[j] 与 A[j-1] 交换
            flag=1   //代表尚未排好序,需要继续排序
         }
      }
      i++
   }
}

三 冒泡排序 c++ 代码实现

冒泡排序法所需的主要变量:

A[N]长度为N的整型数组
i循环变量,表示未排序部分的开头元素,初始值为0,从数组开头向末尾移动
j循环变量,用于对未排序部分中的相邻元素两两比较,从A的末尾N-1开始,减少到 i+1 结束
flag标志变量,如果 一次循环中flag初始值为0,循环后仍是0,代表数组已经有序,不需要再循环排序

代码如下:

void bubbleSort(vector<int> &ivec)
{
    if(ivec.size()==0) return;
	bool flag= true;
	decltype(ivec.size()) i=0;
    while(flag)
	{
    	flag= false;
		for (decltype(ivec.size()) j = ivec.size()-1; j !=(i+1) ; --j) {
                 if(ivec.at(j)<ivec.at(j-1))
				 {
                 	swap(ivec.at(j),ivec.at(j-1));
                 	flag= true;
				 }
		}
		++i;
	}
}


四 插入排序时间复杂度与稳定性分析。


稳定性: 冒泡排序法仅对数组的相邻元素进行比较和交换,因此键相同的元素不会交换顺序,因此冒泡排序是一种较为稳定的排序算法。 但是需要注意,一旦将比较运算符 A[ j ]< A[ j-1 ] 修改为 A[ j ]<= A[ j-1 ] ,算法就会失去稳定性。

复杂度:假设数据总量是N,冒泡排序法需对未排序部分的相邻元素进行 (N-1)+(N-2)+(N-3)+。。。。+2+1=(N^2-N)/2次比较,即算法复杂度数量级为O(N的2次方)。


       冒泡排序中的交换次数又称为反序数或逆序数,可用于体现数列的错乱程度。



















--------------------------------------------------------我是有底线的-------------------------------------------------------------

    感谢能够观看博客的各位开发爱好者们,有问题或建议发表评论呐,★,°:.☆( ̄▽ ̄)/$:.°★

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值