#include<stdio.h>//冒泡排序有flag的使用
void bubblesort(int a[],int n){
int i,j,temp,flag;
for(i=0;i<n-1;i++){
flag=0;//flag用来判断这一趟是否有交换
for(j=0;j<n-i-1;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
flag=1;
}
}
if(flag==0)//若没有交换,则无需下一次排序比较
break;
}
}
int main(){
int n;
scanf("%d",&n);
int a[n];
int i;
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
bubblesort(a,n);
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
#include<stdio.h>//冒泡排序没有flag
void bubblesort(int a[],int n){
int i,j,temp;
for(i=0;i<n-1;i++){
for(j=0;j<n-i-1;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
for(j=0;j<n;j++)
{
printf("%d ",a[j]);
}
printf("\n");
}
}
int main(){
int n;
scanf("%d",&n);
int a[n];
int i;
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
bubblesort(a,n);
return 0;
}
#include<stdio.h>//冒泡排序有flag的使用
void bubblesort(int a[],int n){
int i,j,temp,flag;
for(i=0;i<n-1;i++){
flag=0;//flag用来判断这一趟是否有交换
for(j=0;j<n-i-1;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
flag=1;
}
}
for(j=0;j<n;j++)
{
printf("%d ",a[j]);
}
printf("\n");
if(flag==0)//若没有交换,则无需下一次排序比较
break;
}
}
int main(){
int n;
scanf("%d",&n);
int a[n];
int i;
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
bubblesort(a,n);
return 0;
}
flag的使用在一些特殊的序列下可以减少比较的次数,提高程序的性能
同样的序列比较次数却是有区别的,flag可以减少程序的时间。