冒泡排序

#include<stdio.h>
int main()///冒泡排序
{
    int a[10005];
    int n,temp=0,flag=0;
    while(scanf("%d",&n)!=EOF)
    {
        int sortnum=n-1,lastsort;///优化第二歩,如果后面已经有序,小循环里就停止冒泡
        for(int i=0;i<n;i++)
        scanf("%d",&a[i]);

        for(int i=0;i<n;i++)
        {
            flag=0;             ///优化第一步,如果已经排好序了,提前跳出大循环
            for(int j=0;j<sortnum;j++)
            if(a[j]>a[j+1])
            {
                temp=a[j+1];
                a[j+1]=a[j];
                a[j]=temp;
                flag=1;
                lastsort=j;     ///每次小循环更新冒泡的结束位置
            }
            sortnum=lastsort;   ///需要把值弄到外面另一个变量里,不然的话边冒泡边改变循环条件,难免出错
            if(flag==0) break;
        }

        for(int i=0;i<n;i++)
        printf("%d\t",a[i]);
    }
    return 0;
}

 

posted @ 2018-08-20 14:15  守林鸟  阅读(224)  评论(0编辑  收藏  举报