利用交换旗帜变量flag可以判断是否有继续循环下去的必要;
而每次循环都会将最大的元素送到尾部,所以每次循环次数都可以减少一个。
做
交换旗帜变量 = 假 (False)
for i = 1 to indexOfLastUnsortedElement-1
如果 左边元素 > 右边元素
交换(左边元素,右边元素)
交换旗帜变量 = 真(True)
while 交换旗帜变量
#include<stdio.h>
int main()
{
int i;
int n,m;//元素个数
int a[100];//存储元素
int flag;//计做可进行交换的条件
int t;//用作交换中间变量
scanf("%d",&n);
m = n;
for(i = 0;i < n;i++)
{
scanf("%d",&a[i]);
}
do
{
flag = 0;//每次循环将交换旗帜变量置为0
for(i = 0;i < m-1;i++)
{
if(a[i] > a[i+1])
{
t = a[i+1];
a[i+1] = a[i];
a[i] = t;
flag = 1;//记录进入过循环
}
}
m--;
}while(flag == 1);
for(i = 0;i < n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}