C++排序算法之冒泡排序解析

 更新时间:2023年10月31日 09:22:30   作者:大庆指针  
这篇文章主要介绍了C++排序算法之冒泡排序解析,从左到右,相邻两数两两比较,若下标小的数大于下标大的数则交换,将最大的数放在数组的最后一位,,再次遍历数组,将第二大的数,放在数组倒数第二的位置,以此类推,直到数组有序需要的朋友可以参考下

C++冒泡排序

思想

从左到右,相邻两数两两比较,若下标小的数大于下标大的数则交换,将最大的数放在数组的最后一位(即下标n-1的位置)

采用相同的方法,再次遍历数组,将第二大的数,放在数组倒数第二的位置(即n-2的位置),以此类推,直到数组有序

优化:当数组在整个遍历过程中没有发生交换,说明待排序数组已经有序,此时可以直接结束排序过程(用bool类型变量作标记)。

代码

#include<iostream>
#include<vector>
using namespace std;
void bubbleSort(vector<int>&vec, int n)
{
	for (int j = n; j >= 1; j--)
	{
		bool flag = true;
		for (int i = 0; i < j - 1; i++)
		{
			if (vec[i] > vec[i + 1])
			{
				swap(vec[i], vec[i + 1]);
				flag = false;
			}
		}
		if (flag) return;
	}
}
int main()
{
	vector<int>vec = { 2,3,5,8,9,7,4,6,1 };
	bubbleSort(vec, vec.size());
	for (auto it : vec)
	{
		cout << it << " ";
	}
	return 0;
}

解析

时间复杂度:

最好时间复杂度(有序情况):O(n)

比较n-1次,交换0次 故最好时间复杂度为O(n)

最坏时间复杂度(逆序情况):O(n2)

第一次排序时是n个元素,比较n-1次,交换n-1次

第二次排序时是n-1个元素,比较n-2次,交换n-2次

...

第n-1次排序时是2个元素,比较1次,交换1次

第n次排序时是1个元素,比较0次,交换0次

故选择排序时间复杂度为O((1+2+3+...+n-1)*2)=O(n*(n-1))=O(n2)

空间复杂度:

在原数组上操作,即使用了常数级空间O(1)

到此这篇关于C++排序算法之冒泡排序解析的文章就介绍到这了,更多相关C++冒泡排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解C++中单继承与多继承的使用

    详解C++中单继承与多继承的使用

    C++的继承机制相对其他语言是比较复杂的一种,不同于java只支持单继承,C++不仅支持单继承,也支持多继承。本文将详细讲解C++中单继承与多继承的使用,需要的可以参考一下
    2022-04-04
  • Qt编写地图综合应用之绘制覆盖物折线

    Qt编写地图综合应用之绘制覆盖物折线

    折线图目前应用最广的也是用来绘制各种轨迹,折线图其实就是后面动态轨迹图、飞机航线图的前身,公用的一个方法addPolyline。本文将教大家如何通过QT实现覆盖物折线图,快来学习吧
    2021-12-12
  • 使用Inotify 监控目录与文件的方法详解

    使用Inotify 监控目录与文件的方法详解

    本篇文章是对使用Inotify 监控目录与文件的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Qt重写QTreeView自绘实现酷炫样式

    Qt重写QTreeView自绘实现酷炫样式

    QTreeView,顾名思义,就是一种树形的控件,在我们需要做类似于文件列表的视图时,是一个不错的选择,下面我们就来看看qt如何重写QTreeView实现酷炫样式,感兴趣的可以了解一下
    2023-08-08
  • 用C语言简单实现扫雷小游戏

    用C语言简单实现扫雷小游戏

    这篇文章主要为大家详细介绍了用C语言简单实现扫雷小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 详解C++引用变量时那些你不知道的东西

    详解C++引用变量时那些你不知道的东西

    这篇文章主要为大家详细介绍了C++引用变量时那些你不知道的东西——引用变量延迟绑定,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-11-11
  • C++小知识:C/C++中不要按值传递数组

    C++小知识:C/C++中不要按值传递数组

    今天小编就为大家分享一篇关于C++小知识:C/C++中不要按值传递数组,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • IOS开发之UIScrollView实现图片轮播器的无限滚动

    IOS开发之UIScrollView实现图片轮播器的无限滚动

    这篇文章主要介绍了IOS开发之UIScrollView实现图片轮播器的无限滚动的相关资料,需要的朋友可以参考下
    2017-07-07
  • C++ string字符串的使用和简单模拟实现

    C++ string字符串的使用和简单模拟实现

    C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数和字符串是分离的,本文给大家介绍了C++ string字符串的使用和简单模拟实现,感兴趣的朋友可以参考下
    2024-06-06
  • C++ stack与queue模拟实现详解

    C++ stack与queue模拟实现详解

    这篇文章主要给大家介绍了关于c++stack与queue模拟实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧
    2021-08-08

最新评论