冒泡排序和插旗

冒泡排序的思路是用数组中一个值和其他值挨个比较,使用循环控制对比。

这里要设置两个循环,外层循环用于控制数组中作比较的值,内层循环用于控制这个作比较的值和其他值对比。

插旗则可以看成一个条件判断,满足条件则执行。

//冒泡排序和插旗
public class Demo04 {
    public static void main(String[] args) {
        int a[]={5,6,7,8,9,10,11};
        int tmp;
        for (int i = 0; i < a.length-1; i++) {//冒泡排序,外层循环控制循环次数,
            // 变量i从0开始赋值,执行次数总是比数组空间少1;
            //插旗位标志:目的在数组已经有序的时候结束排序。
            boolean isChange=false;//插旗
            for (int j = 0; j < a.length-1-i; j++) {//内层循环控制对比次数,
                // 此处用-i控制对比次数,随着i变大,需要对比的数的减少
                if(a[j]>a[j+1]){
                    tmp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=tmp;
                    isChange=true;//只要程序有交换数组的情况,isChange就会变值;
                }
            }
            if(isChange==false){//如果程序执行完,isChange的值没有改变,则说明没有进行交换
                System.out.println("数组在"+(i+1)+"轮排序后已经有序");
                break;
            }
        }
    }
}
//插旗类似于C语言中设置一个变量num,只要执行完符合条件的语句就num++,
// 结束后num值没变则说明没有执行那段程序

 

posted @ 2020-04-08 22:16  念念她爹  阅读(153)  评论(0)    收藏  举报