冒泡排序 --跳出循环的break的flag值放错位置

来源:互联网 发布:北斗手机导航软件 编辑:程序博客网 时间:2024/06/18 09:01

用到的一个检验 就是说 如果已经排序好了 就不用走那么多趟了,在while循环里有个if

如果满足条件就把flag设为真,则不跳出,如果没有执行就跳出这个循环,现在只不过是这个if外面多了一个for循环

实质是一样的。

#include<iostream>
using namespace std;


int main(){
       int i=1;
       bool flag;
       while(i<8){
              flag = false;
              i++;

//之前做都是直接在while里有个if如果满足某个条件就改变flag值现在只不过是多了for而已

              for (int j=0;j<8-i+1;j++){


                     if( ){
                            //做一些事情
                            flag=true;
                     }
              }//内部for
              //检验是否还有交换然后跳出while循环
              if(!flag) break;


       }
       return 0;
}



#include<iostream>using namespace std;void insert_sort(int a[], int n);int main(){     int a[]= { 3,7,2,9,6,5,8,1,4};    insert_sort(a,9);system("pause");     return 0;}void insert_sort(int a[], int n){    int i=1, j, temp;    bool flag;    while(i<n)    {        i++;        //@3@ 每一趟都会把flag为false 如果交换了 就设为true,跑完一趟末尾检验是否跳出        //while 循环 ,当排序好了之后呢由于没有交换则flag为假就跳出了。        flag = false;        /* @1@                        //j的范围本来应该是从数组下标为零到n-i-1所以j<(n-i)                        //但这次用的是while循环i已经长了个1 所以改成 j<(n-i+1)             */        for(j=0; j<(n-i+1); j++)        {            /* @2@                //最后报错是因为不恰当的跳出循环                //本来是想每一趟循环只有没有交换的时候才跳出                //但是把flag = false;                写入下面之后每个数比较都要重新设置flag                那么如果最后几个比较的数没有移动就会引起跳出了,所以如果                后面的顺序排好了,就会减少几趟排序,那么前面可能没有排好的也跳出来了            */            //flag = false;            if(a[j]>a[j+1])            {                //如果交换了数据令flag为真                flag = true;                temp = a[j];                a[j]=a[j+1];                a[j+1]=temp;            }        }        /*        @4@ 这一段主要是打印每一趟的排序结果来查看到底是哪次排序出错了        cout<<i-1<<"趟:";        for (int k = 0; k < n; ++k){        cout<<a[k]<<" ";             }             cout<<endl<<"----"<<endl;             */        if(!flag) break;    }    for (i = 0; i < n; ++i)    {        cout<<a[i]<<" ";    }}//insert 


原创粉丝点击