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++类的大小,在C++中,结构体和类的唯一区别就是结构体和类具有不同的默认访问控制属性,下面一起进入文章查看详细内容
    2021-11-11
  • 详解QML 调用 C++ 中的内容

    详解QML 调用 C++ 中的内容

    这篇文章主要介绍了QML 怎么调用 C++ 中的内容,这里主要是总结一下,怎么在 QML 文件中引用 C ++ 文件里定义的内容,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • C++中实现队列类链式存储与栈类链式存储的代码示例

    C++中实现队列类链式存储与栈类链式存储的代码示例

    这篇文章主要介绍了C++中实现队列类链式存储与栈类链式存储的代码示例,通过注释来说明,直接上代码,简单粗暴XD 需要的朋友可以参考下
    2016-03-03
  • C语言库函数中qsort()的用法

    C语言库函数中qsort()的用法

    大家好,本篇文章主要讲的是C语言库函数中qsort()的用法,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • C++实现PyMysql的基本功能实例详解

    C++实现PyMysql的基本功能实例详解

    这篇文章主要介绍了C++实现PyMysql的基本功能,本文通过实例代码给大家介绍的非常详细,对大家的工作或学习有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • 基于C语言实现的迷宫游戏代码

    基于C语言实现的迷宫游戏代码

    这篇文章主要介绍了基于C语言实现的迷宫游戏代码,对于学习游戏开发的朋友相信有一定的借鉴价值,需要的朋友可以参考下
    2014-08-08
  • C++实现顺序表的常用操作(插入删出查找输出)

    C++实现顺序表的常用操作(插入删出查找输出)

    实现顺序表的插入,删除,查找,输出操作在C语言中经常用到。下面小编给大家整理实现代码,一起看下吧
    2016-08-08
  • C++实现彩色飞机大战

    C++实现彩色飞机大战

    这篇文章主要为大家详细介绍了C++实现彩色飞机大战,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • C/C++ Qt 数据库与TreeView组件绑定详解

    C/C++ Qt 数据库与TreeView组件绑定详解

    本篇文章主要介绍了QT数据库与View组件的绑定,通过数据库与组件关联可实现动态展示数据库中的表记录。感兴趣的小伙伴可以了解一下
    2021-12-12
  • C语言中K-means算法实现代码

    C语言中K-means算法实现代码

    这篇文章主要为大家详细介绍了C语言中K-means算法的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02

最新评论