【数据结构与算法】冒泡排序

大家好,这里是国中之林!
❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看←

一.冒泡排序原理

在这里插入图片描述
还是老样子,我们如何对这个进行排序呢?
冒泡排序的原理是,将两两进行比较,如果前面较大的我们就进行交换到后面.
然后再对交换后的这个和下一个进行比较,一轮过后,最大值就交换到最后了.
在这里插入图片描述

二.图示

这个步是一轮哦.
在这里插入图片描述
在这里插入图片描述
我们来找规律:

  • 总共10个元素,但是还是比较9轮就可以出结果.
  • 每一轮可以选出一个最大值,这个位置我们就不考虑了.

三.冒泡排序具体实现

在这里插入图片描述

四.冒泡排序升级版

这里有个问题,就是明明我们两轮就比较出来了,但是为了其他的情况,我们还是要继续比较,浪费资源,那么有没有什么办法呢?
在这里插入图片描述
我们想一下,什么情况就是已经排好顺序了.
那就是虽然两两比较,但是没有交换了嘛.
所以我们可以设置一个排好序的标志,如果这一轮有交换就说明没有排好序,还需要继续.
如果这一轮都没有进行交换,那么我们就可以退出了,证明已经排好了.
在这里插入图片描述

五.完整代码

#include <iostream>
using namespace std;

void swap(int* num1, int* num2)
{
	int temp = *num1;
	*num1 = *num2;
	*num2 = temp;
}

void BubbleSort(int arr[], int len)
{
	for (int i = 0; i < len - 1; i++)
	{
		bool sorted = true;
		for (int j = 0; j < len - i - 1; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				swap(&arr[j], &arr[j + 1]);
				sorted = false;
			}
		}
		if(sorted)break;
	}
}

void BubbleSort2(int arr[], int len)
{
	for (int i = 0; i < len - 1; i++)
	{
		for (int j = 0; j < len - i - 1; j++)
		{
			if (arr[j] < arr[j + 1])
			{
				swap(&arr[j], &arr[j + 1]);
			}
		}
	}
}

int main()
{
	int test[] = { 5,1,3,2,7,4,6,9,8,10 };
	int len = sizeof(test) / sizeof(test[0]);
	BubbleSort(test, len);
	cout << "排序结果:" << endl;
	for (int i = 0; i < len; i++)
	{
		cout << test[i] << " ";
	}

	cout << endl;
	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述

2024年8月18日14:47:19

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值