zl程序教程

您现在的位置是:首页 >  后端

当前栏目

01、算法系列,冒泡排序代码实现 + 讲解

算法代码 实现 系列 讲解 01 冒泡排序
2023-09-14 09:12:43 时间

    如果你已经学会C,C++(或看过《C++Primer》)的基本语法,想要再精进一层的话,那就是该接触数据结构与算法的时候了,这个系列博文的主题亦如此,所提供的代码都是在学习这些的过程中,自己写的代码,且亲测有效。

    无数前辈说过,程序 = 数据结构 + 算法,数据结构就是内存对数据的存储方式,算法就是对数据的加工处理。那么对于超大量的数据,为了管理他们,为了以后好取出想要的值,对他们的加工处理基本上都是按照各种排序方式,排来排去。

  《Effictive C++》赞美之音飘于四海,这本书的中文翻译者侯捷,他老人家更是桃李满天下。他第一次听人说了电脑就是对存进来的数据排一下序,很难相信,他认为因为电脑是一种顶级高科技的存在,是用来发射火箭的,怎么就只排排数据。所以很容易忽略排序的重要性,因为我们平时都是处理的小量数据,想取哪一个数据手动,输出一下就行了。

    举个业务上的例子,现在各个银行都在建设5G银行,系统会保存客户的人脸图片,当客户下次去银行的时候,门口会有声音欢迎王先生光临~。因为门口会有摄像头做人脸拍照,然后与数据库的照片比对排序。这种比对是一个个比吗,如果客户在上亿的量,一个个比太慢了,系统的实现是按照图片上的特性值,把之前在数据库中存的上亿照片按照一定的方式排序,这样就不需要一个个比对,可以用二分查找这类方法快速找到。

    排序算法,分两部分,业务 + 代码,业务即是算法怎么实现这个功能的,文字上描述一下,代码是具体是实现。无论上个小系列数据结构还是接下来的算法,我都将采用这种方式讲解。理解业务更易看懂代码,然有些业务说起来很抽象,照猫画虎的不好文字描述,直接看代码范围理解快一点,所以两者可以结合着来理解。

    刚开始学前几个排序时,这些排序是最简单的也是最难的,最简单是因为学了好久之后再回来看,最难是因为刚刚接触的前几个排序,一看晕了,再看排序算法这么多,放弃了。其实不然,只要学会几个,后面就会很轻松,还有助于你以更高的视野看前面学过的算法。

    冒泡排序的业务是两层循环,第一层循环控制执行第二层循环的次数。按从左到右依次增大排,第二次循环是选择第一个为基准值,跟第二个进行比较,如果比第二个大,就跟第二个换下位置,否则不换位置,两种情况下都拿第二个为基准值,重复与第三个值比较,一直到两层循环全部结束。

郭襄:我走过山时,山不说话,我路过海时,海不说话,
                                                     小毛驴滴滴答答,倚天剑伴我走天涯。
 

     很多时候,这个世界是自己的跟他人无关,生活需要自己去探索,代码要自己码,没人能帮你做这些。

上代码,亲测有效!

01、冒泡排序.cpp

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <string>


int main(void)
{
	//定义初始化数组
	int myArray[10] = { 2, 1, 4, 3, 6, 5, 8, 7, 0, 9 };
	//对数组进行排序
	for (int i = 0; i < 9; i++)//数组10个元素排9轮
	{
		int flag = 1;
		for (int j = 0; j < 9; j++)
		{
			if (myArray[j] > myArray[j + 1])
			{
				int temp = myArray[j];
				myArray[j] = myArray[j + 1];
				myArray[j + 1] = temp;
				flag = 0;
			}
		}
		if (flag == 1)
		{
			break;
		}
	}
	//打印数组
	for (int i = 0; i < 10; i++)
	{
		printf("数组元素:%d ", myArray[i]);
	}
	printf("\n");
	system("pause");
	return 0;
}