Day26.1.冒泡排序

Day26.1.冒泡排序

1.内容

  • 两层循环,外层冒泡轮数,内层依次比较,时间复杂度O(n2),{实际为(n-1)*n/2},(具体参考数据结构)

  • 相邻的数比较

  • 一轮确定一个数的位置

  • 最后一个数不用进行单独轮次的比较,因为只有一个位置剩余,所以最后一个数的位置是确定的

  • n个数需要n-1轮排序,总共进行n*(n-1)/2次比较次数

  • 相邻数交换位置,需通过中间变量来交换

2.示例

 public class Demo06 {
     public static void main(String[] args){
         //冒泡排序
         int[] a={1,5,9,98,101,6,0};
         sort(a);
 
    }
     //定义冒泡排序方法
     public static void sort(int[] array){
         for(int i=0;i<array.length-1;i++){//一轮确定一个数的位置,剩下的最后一个数无需比较,n-1次排序
             for(int j=0;j<array.length-1-i;j++){//循环比较
                 if(array[j]>array[j+1]){//通过中间变量交换位置
                     int t=array[j+1];
                     array[j+1]=array[j];
                     array[j]=t;
                }
            }
        }
         System.out.println(Arrays.toString(array));
    }
 }

改进:

 public static void sort(int[] array){
     for(int i=0;i<array.length-1;i++){//一轮确定一个数的位置,剩下的最后一个数无需比较,n-1次排序
         boolean flag=false;
         for(int j=0;j<array.length-1-i;j++){//循环比较
             if(array[j]>array[j+1]){//通过中间变量交换位置
                 int t=array[j+1];
                 array[j+1]=array[j];
                 array[j]=t;
                 flag=true;
            }
        }
         if(flag==false){//说明某一次排序(设第X次排序)没有发生交换,说明形式上未排序好的数,实际已经排序好了
             break;//X之后的排序都不用执行了
        }
    }
     System.out.println(Arrays.toString(array));
 }

减少无效排序,筛选条件为某次排序的所有比较次数都未发生位置交换。

posted @ 2022-12-21 18:34  武义一中梁朝伟  阅读(109)  评论(0)    收藏  举报