提问c语言冒泡排序改进

img

图示中例子怎么改进冒泡排序,如果是通式又该怎么改呢,有没有人指点一下

加个 是否交换的标识

// 从前往后冒泡
void sort(int a[],int n)
{
    int i,j,t,noswap;
    for(i=0;i< n-1; i++)
    {
        noswap=1; // 是否交换标识,1 没有交换过,  0 交换过
        for(j=0;j<n-1-i;j++)
            if(a[j+1]<a[j])
            {
                t=a[j+1];
                a[j+1]=a[j];
                a[j]=t;
                noswap=0;
            }
        if(noswap)  // 没有交换过,则表示已经排序好,直接退出
            break;
    }
}

可以省略中间变量k交换j、j+1的值:
a[j] = a[j] + a[j + 1];
a[j + 1] = a[j] - a[j + 1];
a[j] = a[j] - a[j + 1];