冒泡排序的实例(以及冒泡排序的优化)

前言

关于冒泡排序灰太狼和settingsun都有讲,我这里就综合一下两位朋友的解析,并且给出OJ的实例来让大家更加熟悉冒泡排序.(冒泡排序还是比较重要的)好久没更新了,以后我就不常更有关ACM算法的题了,域不大喜欢ACM(x,比赛也直接摆烂,域更加喜欢自由的CTF.

题目

图片[1],冒泡排序的实例(以及冒泡排序的优化),网络安全爱好者中心-神域博客网

先附上两位朋友的冒泡解析:

By:Settingsun

By:灰太狼

118普通答案+解析

有什么不懂可以问我

#include <stdio.h>
void insert(int a[],int n,int num)
{     int t; //定义一个中间变换值用来达到a[j]和a[j}+1的顺序替换
	a[n] =num;
	n=n+1; //插入一个数,需给他加一
	for(int i=0;i<n;i++)  //这里不是n-1 因为这里不是数组是循环几次
	{
		for(int j=0;j<n-1;j++) //n-1 因为数组是从0开始
		{
			if(a[j]>a[j+1])  //下面就是简单的替换顺序
			{
				t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;
			}
		}
	}
}
void printarr(int a[],int n)
{
	for(int h=0;h<n+1;h++)
	{
		printf("%d",a[h]);
		if(h<n)
		{
			printf(" ");  //这里是输入空格 如果直接输出空格的话,第一个数会有空格
		}
	 } 
}
int main()
{
	int n;
	scanf("%d",&n);
	int a[n];
	for(int h=0;h<n;h++)
	{
		scanf("%d",&a[h]);
	}
	int num;
	scanf("%d",&num);
	insert(a,n,num); //调用函数
	printarr(a,n);  //这里也是调用
	return 0;
	 
}
118优化答案加解析

这里的优化目的是增加运行速度

#include <stdio.h>
void insert(int a[],int n,int num)
{     int t; //定义一个中间变换值用来达到a[j]和a[j}+1的顺序替换
	a[n] =num;
	n=n+1; //插入一个数,需给他加一
	for(int i=0;i<n;i++)  //这里不是n-1 因为这里不是数组是循环几次
	{        int flag=1;//定义一个标识符
		for(int j=0;j<n-1;j++) //n-1 因为数组是从0开始
		{
			if(a[j]>a[j+1])  //下面就是简单的替换顺序
			{   flag=0;//改变标识符
				t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;
			}
		}
        if(flag==1){ //如果标识符等于1那就不用进行循环了
        break;}
	}  
}
void printarr(int a[],int n)
{
	for(int h=0;h<n+1;h++)
	{
		printf("%d",a[h]);
		if(h<n)
		{
			printf(" ");  //这里是输入空格 如果直接输出空格的话,第一个数会有空格
		}
	 } 
}
int main()
{
	int n;
	scanf("%d",&n);
	int a[n];
	for(int h=0;h<n;h++)
	{
		scanf("%d",&a[h]);
	}
	int num;
	scanf("%d",&num);
	insert(a,n,num); //调用函数
	printarr(a,n);  //这里也是调用
	return 0;
	 
}
------本文已结束,感谢您的阅读------
THE END
喜欢就支持一下吧
点赞7 分享
评论 共4条

请登录后发表评论