冒泡排序c++

5 篇文章 0 订阅
4 篇文章 0 订阅

主要介绍冒泡排序的算法:

算法思想:冒泡排序分两轮循环,一次外循环和一次内循环,每次比较相邻的两个数,若前面的数大于后面的数则交换位置,依次比较,直到跟最后一个数比较,每次比较完后最大的那个数肯定会在最后面,然后去掉最后一个数,剩下的数再从头开始,依次比较。后面的同理,知道最后一个数,算法完毕。

举个例子

8 6 7 3 9 4 2 1 5

第一轮比较(外循环,内循环)8 6 7 3 9 4 2 1 5

8大于6,则交换位置  6 8 7 3 9 4 2 1 5

第二次比较(内循环)6 8 7 3 9 4 2 1 5

8大于7,交换位置   6 7 8  3 9 4 2 1 5

第三次比较 (内循环)6 7 8 3 9 4 2 1 5

8大于3,交换位置 6 7 3 8 9 4 2 1 5

第四次比较 (内循环)6 7 3 8 9 4 2 1 5

8小于9,则不交换位置 6 7 3 8 9 4 2 1 5

下面同理,直到最大数9拍到最后一个位置,第一次外循环结束,同时第八次内循环结束。

开始第二轮外循环等等;直到只剩最后一个数,结束算法。

分析:外循环的次数=元素总个数-1,内循环次数=元素总个数-外循环的次数-1;

下面给出源码:

#include<iostream>
#include<vector>

using namespace std;


//冒泡排序
void bubbleSort(vector<int>&a)
{
	//总轮数为总元素个数减1
	for (int i = 0; i < a.size() - 1; i++)
	{
		//内部比较数为总元素个数-循环次数-1
		for (int j = 0; j < a.size() - 1 - i; j++)
		{
			if (a[j] > a[j + 1])//交换位置
			{
				swap(a[j], a[j + 1]);
			}
		}
	}
}

int main()
{
   vector<int>v = { 9,8,3,7,2,4,5,6,1 };
	cout << "排序前:" << endl;
	for (auto x : v)
	{
		cout << x << " ";
	}
	cout << endl;
	bubbleSort(v);
	cout << "排序后:" << endl;
	for (auto x : v)
	{
		cout << x << " ";
	}
	cout << endl; 
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

远赴人间 ,

大一小白,希望多支持我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值