首页 > 编程语言 >经典的排序算法 - 冒泡排序

经典的排序算法 - 冒泡排序

时间:2023-03-12 17:32:32浏览次数:32  
标签:arr int 冒泡排序 算法 冒泡 排序

经典的排序算法 - 冒泡排序_冒泡算法


冒泡排序算法应该可以说是很经典的一种对数据进行排序的的算法了,甚至在很多的介绍算法的数据中,它可能还是放在最前面开始讲解的。

冒泡排序算法到底是咋样的呢?冒泡这个说法又是怎么得来的呢?

首先先理解一下冒泡算法的实现原理。

冒泡算法的实现原理:是在一组散乱的数据中,按照升序或者降序的方式,不断的比较相邻的两个元素数据,如果第一个比第二个大(或者第一个比第二个小),就交换这两个数据元素的位置。

每一对相邻的数据元素都进行比较,交换位置,直到结尾的最后一对。这个过程就实现了将最大(最小)的元素放到最后的位置。

不断的重复上面的步骤,最后就能将数据中的最大(最小)的元素放到最后。这个过程就像是水里的泡泡产生的过程,最底下的最小,在上升过程中逐渐变大,直到最后冒出水面的泡泡是最大的。也许这就是冒泡算法的名字由来吧!

冒泡算法的实现过程可以用下面的动图演示一下:

经典的排序算法 - 冒泡排序_冒泡算法_02

上图中的演示就是按照将数据按照从小到大的顺序进行排列,最终要实现最后的那个位置的元素需要时最大的目的。这个过程就像冒泡一样。

冒泡排序算法什么时候能最快完成排序和最慢排成排序?(我这里以升序为例说明)

最快的时候应该是在所需要排序的数据正好正序的时候了,这个时候不需要进行任何数据的交换。

最慢的时候应该是在数据正好是反序的时候,这个时候每一对相邻的数据都需要进行一次交换排序,也是费时间最长的。

用C语言实现的简单冒泡算法如下:(升序为例)

void maopao_sort(int *arr,int len)
{
int i,j,temp;
for(i=0;i<len-1;i++)
{
for(j=0;j<len-1-i;j++)
{
if(arr[j] > arr[j+1])
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}

从程序中可以看的出来,假如共有 n 个数据进行排序,冒泡排序算法最终要实现的排序次数为 n-1次。

那如果在排序中,经过几次排序就已经完成了数据的排序,那之后的几次都不需要检查数据了,那岂不是有好几次是在“空跑”?这样浪费了一些时间,这种情况最好能做点优化。

优化后的代码如下:

void maopao_sort(int *arr,int len)
{
int needSortFlag = 0;
int i,j,temp;
for(i=0;i<len-1;i++)
{
for(j=0;j<len-1-i;j++)
{
if(arr[j] > arr[j+1])
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
needSortFlag = 1;
}
}
if(!needSortFlag) break;
}
}

至此,冒泡排序算法的原理和讲解就结束了,总而言之,冒泡排序算法还是比较简单的。



经典的排序算法 - 冒泡排序_冒泡算法_03

标签:arr,int,冒泡排序,算法,冒泡,排序
From: https://blog.51cto.com/wangjunlv/6116217

相关文章

  • 数据结构与算法
    释义:数据结构啥指相互之前存在一种或多种特定关系的数据元素的集合算法是规则的有限集合,是为解决特定问题而规定的一系列操作程序=数据结构+算法语句频度:是指该语句......
  • Java算法——字符串
    344.反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)......
  • matlab如何对矩阵按某列排序
    sortrows函数是Matlab中的一个排序函数,用于对矩阵按照指定的列进行排序。sortrows函数的使用方法如下:matlabB=sortrows(A,cols)输入参数包括:A:待排序的矩阵。col......
  • 算法竞赛学习资源整理
    一、测评1、国内OJluogu/vijos/codevsLOJ/UOJ/BZOJPOJ/Virtual/Open2、国外OJUSACOUVaCF二、资源1、教程OIWikistandFordCS97SI2、书籍刘汝佳/李煜东/秋叶拓哉(竞赛圈)一本......
  • 用冒泡排序模拟qsort的实现
    #include<stdio.h>#include<stdlib.h>#include<string.h>//交换voidswap(char*arr1,char*arr2,intwidth){inti=0;for(i=0;i<width;i++){chararr......
  • 排序算法的性能分析
    排序算法有很多,但适用的场景不尽相同,今天就做个总结,关注时间复杂度、稳定性,最好情况和最坏性能。算法稳定性的含义参见对排序算法稳定性的理解-BeLady-博客园(cnblogs......
  • 1 课程表数据录入 、2 课程分类接口、3 所有课程接口(过滤,排序)、4 课程详情接口(没有
    目录1课程表数据录入2课程分类接口2.1路由2.2序列化类2.3视图类3所有课程接口(过滤,排序)3.1表模型3.2序列化类3.3视图类3.4路由4课程详情接口(没有章节和课时的......
  • 降维算法: 奇异值分解SVD
    动动发财的小手,点个赞吧!1.为什么降维总所周知,在低维下,数据更容易处理,但是在通常情况下我们的数据并不是如此,往往会有很多的特征,进而就会出现很多问题:多余的特征会影响......
  • 字符串匹配之KMP算法中的pnext表
    pnext表的分析上篇我们提到了最后是构建一个pnext表,记录着每个字符匹配需要移动的长度的位置信息,接着上篇的内容,我们来分析下pnext表的构造。还是举个栗子:ababcabcacb......
  • Qz学算法-数据结构篇(排序算法--冒泡、选择)
    排序算法排序的概念排序也称排序算法(SortAlgorithm),排序是将一组数据,依指定的顺序进行排列的过程分类排序的分类:内部排序:指将需要处理的所有数据都加载到内部存储器中进......