冒泡排序中int型与blooean型问题

flag是int型变量,这么写代码会报错,为啥课本还是这么写呢?冒泡排序中好像也并不需要flag变量,为啥还要设这个变量呢?

img

  • 加flag,主要是为了避免不必要的冒泡循环比较。
  • 其实这里 还少了 一段代码,如下:
// 从后往前冒泡
void sort(int a[],int n)
{
    int i,j,t,flag;
    for(i=0;i< n-1; i++)
    {
        flag=1;
        for(j=n-1;j>i;j--)
            if(a[j-1]>a[j])
            {
                t=a[j-1];
                a[j-1]=a[j];
                a[j]=t;
                flag=0;
            }
        if(flag)    // 一轮冒泡后,没有需要冒泡,就说明已经排序号了
            break;
    }
}

// 从前往后冒泡
void sort1(int a[],int n)
{
    int i,j,t,flag;
    for(i=0;i< n-1; i++)
    {
        flag=1;
        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;
                flag=0;
            }
        if(flag)   // 一轮冒泡后,没有需要冒泡,就说明已经排序号了
            break;
    }
}

冒泡排序无需flag

img

这个在java中肯定是错的,你看看这个有没有说是哪个语言的