文章目录




前言

排序算法是最经典、最基础的算法之一,也是我们学习C语言接触较早的算法,可是你是否真的掌握了冒泡算法了呢?今天让我们聊一聊排序算法中冒泡算法。



一、定义与基本思路

冒泡排序是一种较简单的排序算法,又称起泡排序。其基本思路是,每次将相邻的两个,每次比较一轮,总会找到序列中最大的一个或最小的一个。最终可以得到一个递增数列或者递减数。



二、例题详解



1.算法实现过程

 



2.例题讲解

下面以递增数列为例

1).详细代码

# include <stdio.h>
int main()
{
    int a[] = {30,5,7,-29,90,89,20,100,24};
    int n,i,j,temp;
    n = sizeof(a) / sizeof(a[0]); 
    for (i=0; i<n-1; ++i) 
    {
        for (j=0; j<n-1-i; ++j)  
        {
            if (a[j] > a[j+1])
            {
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }
    for (i=0; i<n; ++i)
    {
        printf("%d\x20", a[i]);
    }
    printf("\n");
    return 0;
}

2).运算结果如图所示

 

注意:空格也是也是一种字符,数组的最后一为一般是空格,注意输出的格式。

 3.冒泡算法的核心过程

void Bubble_sort(int a[],int n)
 {
	 int i,j,temp;
	 for(i=0;i<n-1;i++)//C语言中数组的下标是从0开始,故i最大为n-1
	 {
		 for(j=0;j<n-1-i;j++)
		 {
			 if(a[j]>a[j+1])
			 {
				 temp=a[j];
				 a[j]=a[j+1];
				 a[j+1]=temp;
			 }
		 }
	 }
 }

4.时间复杂度分析 

通过冒泡算法是基本思想和例题分析,发现冒泡排序算法在每轮排序中会得到一个数最终确定位置,而一个长度为n的数列需要 n-1 轮的比较排序,有例题分析可知,其需要两层for循环,故按照计算时间复杂度的规则,去掉常数和最高项系数,其时间复杂度为O(N^2)。




总结

冒泡算法是一种简单易学的算法,对于上篇(二分查找的简单运用_m0_50708613的博客-CSDN博客)所提到的,面对无序的数列,可以先用冒泡算法进行排序,再采用二分法查找某一个数值,但是冒泡算法是一种效率较低的方法,不适合用于处理大量数据的情况。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐