冒泡排序升序,如何加一个控制语句,如果给出的数据已经是升序的,则直接跳出循环并输出
#include
#define N 10
int main()
{
int a[N],i,j,t;
for(i=0;i"%d",&a[i]);
for(i=0;ifor(j=0;jif(a[j]>a[j+1]){
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
}
}
for(i=0;i"%d\t",a[i]);
return 0;
}
就是检查一趟循环是否发生数字交换,没有交换则表示已经排好序
#include<stdio.h>
#define N 10
int main()
{
int a[N],i,j,t,flag = 0;
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N-1;i++){
flag = 0;
for(j=0;j<N-i-1;j++){
if(a[j]>a[j+1]){
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
flag = 1;
}
if(flag == 0)
break;
}
}
for(i=0;i<N;i++)
printf("%d\t",a[i]);
return 0;
}
应该不行吧,如果没有全部遍历比较完成,你怎么知道数据是升序还是什么顺序的。时间复杂度已经是固定的,不可能中途退出。