排序算法中的冒泡排序法
Posted ss-live
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法中的冒泡排序法相关的知识,希望对你有一定的参考价值。
遍历 — 样本筛选
有的时候,样本范围内的数据可能不是每一个我们都需要,而是只需要其中一部分,那么在遍历样本时,就需要对取出的每一个样本数据进行判断,看是否满足我们的需要,也就是要对样本进行筛选。
比如,输出1-10之间所有的奇数,虽然样本范围是1-10,但不是每一个样本数据都是我们需要的,因此,我需要对取出的每一个数据进行验证,看它是不是奇数,如果是,才输出。
可以使用下面的代码来完成输出1-10之间所有的奇数:
for (int i = 1; i <= 10; i++)
{
// 每一次进入循环体,i,就是取出的其中一个样本数据
// 判断该数据是不是奇数
if (i % 2 != 0)
{
Console.Write(i);// 该样本数据满足条件,输出
}
}
运行结果为:
13579
遍历 — 样本求和
有的时候,我们需要把样本范围内的所有数字相加,这就是求和问题。
面对求和的问题,可以使用这样的思路:在遍历之前,先准备好一个变量,值为0,然后取出样本的第一个数据,将变量的数据和第一个数据相加,然后再保存到变量中。然后对样本剩下的数据做同样的处理即可。
举个例子,比如让你对10-15之间的所有数字求和,可以使用如下的方案:
第一步:准备好一个变量,比如sum,让它的值为0
- sum = 0;
第二步:将样本范围内的每一个数和变量sum中保存的值累加,然后再保存到sum中:
- sum += 10; // sum:10
- sum += 11; // sum: 21
- sum += 12; // sum: 33
- sum += 13; // sum: 46
- sum += 14; // sum: 60
- sum += 15; // sum: 75
第三步:当遍历结束后,变量sum中的值就是累加求和的结果。
把上面的例子转换为代码如下:
//第一步
int sum = 0;
//第二步
for (int i = 10; i <= 15; i++)
{
sum += i;
}
//第三步
Console.Write("和为:" + sum);
输出结果如下:
和为:75
这就是求和问题的做法,类似的累计问题也是同样的方案,比如求10-15之间所有数的乘积,可以使用下面的代码:
//第一步
int sum = 1; // 求乘积要从1开始
//第二步
for (int i = 10; i <= 15; i++)
{
sum *= i; // 使用累乘
}
//第三步
Console.Write("积为:" + sum);
运行结果为:
积为:3603600
遍历 — 样本计数
样本计数问题往往会和样本筛选问题合并使用。
它是指这么一种场景,有一个样本范围,需要计算该样本范围中满足条件的样本数据有多少个。
比如,55-66中有多少个数能同时被2和3整除。
可以使用如下的思路解决:
第一步,准备好一个变量num,该变量表示满足要求的样本数据数量,一开始的值为0。
- int num = 0;
第二步,遍历样本,一个一个将样本数据拿出来,看看该样本数据是否满足要求,如果满足,将计数变量num自增1。
- 55 不满足要求,什么也不做
- 56 不满足要求,什么也不做
- 57 不满足要求,什么也不做
- 58 不满足要求,什么也不做
- 59 不满足要求,什么也不做
- 60 满足要求,num++ // num: 1
- 61 不满足要求,什么也不做
- 62 不满足要求,什么也不做
- 63 不满足要求,什么也不做
- 64 不满足要求,什么也不做
- 65 不满足要求,什么也不做
- 66 满足要求,num++ // num: 2
第三步,当遍历结束后,变量num中的值就是计数的结果。
把上面的例子转换为代码如下:
//第一步
int num = 0; // num表示计数的结果,在一开始,计数之前,为0
//第二步
for (int i = 55; i <= 66; i++)
{
if (i % 2 == 0 && i % 3 == 0)
{
num++;
}
}
//第三步
Console.Write("55-66中,共有" + num + "个数能同时整除2和3");
运行结果如下:
55-66中,共有2个数能同时整除2和3
计数问题有一个经典的场景,就是判断一个数是不是质数(素数)
什么是质数(素数)?质数(素数)是一个大于等于2的数,该数只能被1和自身整除。
这看上去不像是一个计数场景,甚至不像是任何一个遍历场景。
既然质数只能被1和自身整除,换句话说,在1到该数之间,一定只有两个数能整除该数。比如,7是一个质数,因为1-7之间,只有两个数(1和7)能整除它。
仔细理解上面这段话,如果你理解了,就会发现这是一个什么问题?没错,这就是一个计数问题。
我们要判断一个数n是不是质数,只需要看1-n之间有多少个数能整除n,如果数目为2,它就是质数,否则,它就不是。
于是,可以使用下面的代码来判断:
int n = 3311; // 待判断的数n,假设它的值是3311
//下面是计数问题的代码
//第一步
int num = 0; //计数
//第二步,遍历范围1-n
for (int i = 1; i <= n; i++)
{
if (n % i == 0)
{
num++;//计数+1
}
}
//第三步,根据计数结果来判断
if (num == 2)
{
Console.Write(n + "是一个质数");
}
else
{
Console.Write(n + "不是一个质数");
}
执行结果:
3311不是一个质数
以上是关于排序算法中的冒泡排序法的主要内容,如果未能解决你的问题,请参考以下文章