排序算法中的冒泡排序法

ss-live ss-live     2022-12-26     403

关键词:

遍历 — 样本筛选

有的时候,样本范围内的数据可能不是每一个我们都需要,而是只需要其中一部分,那么在遍历样本时,就需要对取出的每一个样本数据进行判断,看是否满足我们的需要,也就是要对样本进行筛选。

比如,输出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不是一个质数







































































算法之旅|冒泡排序法

冒泡排序法HTML5学堂-码匠:本期继续走入算法——冒泡排序法。冒泡排序算法相对简单,容易上手,稳定性也比较高,算是一种较好理解的算法,也是面试官高频提问的算法之一。Tips:关于“算法”及“排序”的基础知识,在此... 查看详情

算法大神之路----排序(冒泡排序法)

冒泡排序法冒泡排序法又称为交换排序法,是由观察水中冒泡变化构思而成,气泡随着水深压力而改变.气泡在水底时,水压最大,气泡最小,而气泡慢慢浮上水面时,气泡所受压力最小,体积慢慢变大.冒泡排序比较方式是从第一个元素开... 查看详情

算法之旅|冒泡排序法

HTML5学堂-码匠:本期继续走入算法——冒泡排序法。冒泡排序算法相对简单,容易上手,稳定性也比较高,算是一种较好理解的算法,也是面试官高频提问的算法之一。Tips:关于“算法”及“排序”的基础知识,在此前“选择排... 查看详情

交换排序------冒泡法及其优化

...数据结构的时候就学过 冒泡法, 作为比较经典的排序方式由于其时间复杂较高一直作为入门级的算法,虽然冒泡算法在实际应用中较少但是也是有一定的研究价值的,这里给出三种实现,第一种为原始算法时间复杂度为... 查看详情

重温基础算法内部排序之冒泡排序法(代码片段)

内部排序之冒泡排序法文章目录内部排序之冒泡排序法主要思想过程演示JAVA代码算法分析时间复杂度空间复杂度冒泡排序(BubbleSort)也是一种简单快速的排序算法。它重复地遍历过要排序的数列,一次比较相邻的两... 查看详情

算法---冒泡排序法

冒泡排序:通过对相邻元素的对比,并交换位置,一步一步的把一个元素给挑选出来。我们可以使用两层嵌套的for循环来实现这个过程,也就是实现冒泡排序://外层控制轮数for(vari=0;i<len;i++){  //内层对数组元素进行冒泡选... 查看详情

简单排序算法:冒泡法排序(java)

冒泡排序口诀:两两比较,两两交换。操作对象:乱序数组操作方式:双循环以及内层循环中条件的判断操作结果:升序或降序数组    举例:    给定一个数组:int[]arr=newint[]{99,33,21,14,65,11,9,45,22,10};... 查看详情

冒泡排序法(超详细)(代码片段)

冒泡排序法文章目录冒泡法的基本思路思路总结程序实现下面我们一起来看看排序中的冒泡排序法。💡[例]有5个数字,要求对它们按由小到大的顺序排列。这种问题称为数的排序(sort)。排序的规律有两种:一种是“升序”... 查看详情

冒泡排序法

冒泡排序(BubbleSort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这... 查看详情

排序算法冒泡法(代码片段)

1,排序算法的优劣评价标准稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面; 时间复杂度:一个算法执行所耗费的时间。空间复杂度:运行完一... 查看详情

冒泡法(代码片段)

冒泡法标签(空格分隔):python-排序算法冒泡法介绍三大基础排序算法之一冒泡法属于交换排序两两比较大小,交换位置。结果分为升序和降序排序时间复杂度n*(n-i-1)=n**2代码实现lst=[5,6,7,8,9,10,11,12,15,14]#待排序列表length=len(lst)#长... 查看详情

java算法之冒泡排序法

N个数字要排序完成,总共进行N-1趟排序,每第i趟的排序次数为(N-i)次,所以        可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数,即   for(inti=0;i<arr.length-1;i++... 查看详情

java,冒泡排序法,网上查阅

冒泡排序(BubbleSort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这... 查看详情

八大数据排序法冒泡排序法的图形理解和案例实现|c++(代码片段)

第十四章冒泡排序法:::hljs-center目录第十四章冒泡排序法●前言●认识排序●一、冒泡排序是什么?1.简要介绍2.具体情况3.算法分析●二、案例实现1.案例一2.案例二●总结:::前言排序算法是我们在程序设计中经常见到和使用的一... 查看详情

基本算法-冒泡排序(代码片段)

...#xff0c;非商业转载请注明出处前言    本文介绍一种经典排序算法——冒泡排序,是入门级的排序算法之一。以下是本篇文章正文内容,包括算法简介、算法特点、算法实现和C++示例。一、冒泡排序简介    冒泡... 查看详情

基本算法-冒泡排序(代码片段)

...#xff0c;非商业转载请注明出处前言    本文介绍一种经典排序算法——冒泡排序,是入门级的排序算法之一。以下是本篇文章正文内容,包括算法简介、算法特点、算法实现和C++示例。一、冒泡排序简介    冒泡... 查看详情

冒泡法:基础排序算法(代码片段)

交换排序;结果分升序和降序两种排列以升序为例:第一轮比较:两两比较大小,大值向右挪到,直到最大值挪动到索引为n-1的位置结束                    ... 查看详情

python数据结构与算法之排序(冒泡,选择,插入)(代码片段)

目录数据结构与算法之排序(冒泡,选择,插入)为什么学习数据结构与算法:数据结构与算法:算法:数据结构冒泡排序法选择排序法插入排序法数据结构与算法之排序(冒泡,选择,插入)为什么学习数据结构与算法:计算机重要的几门课:1.... 查看详情