前言
关于冒泡排序灰太狼和settingsun都有讲,我这里就综合一下两位朋友的解析,并且给出OJ的实例来让大家更加熟悉冒泡排序.(冒泡排序还是比较重要的)好久没更新了,以后我就不常更有关ACM算法的题了,域不大喜欢ACM(x,比赛也直接摆烂,域更加喜欢自由的CTF.
题目
先附上两位朋友的冒泡解析:
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
- 最新
- 最热
只看作者