排序算法 -- 冒泡排序(java)

冒泡排序的算法思想:

     1. 一轮冒泡:从头到尾扫描数组,相邻元素j和j+1依次比较,如果逆序则交换,这样一轮冒泡扫描之后 最值已经放入到数组的最后

     2.  需要进行n-1轮次(每轮扫描的数组大小减去1,最后只是剩下一个元素的数组时无需冒泡扫描)的冒泡,每轮冒泡确定一个最值放在数组的最后,每轮冒泡的数组的大小减去1

 

代码实现:

   

class Demo {
    public static void main(String[] args){
        int[] nums = {1,9,5,2};
        bubbleSort(nums);
        System.out.println(Arrays.toString(nums));
    }

    public static void bubbleSort(int[] arr){
       //优化:如果遇到某一个轮次没有进行交换,则说明数组已经排列有序,无需进行后续的轮次扫描
       boolean changed = true//轮次
       for(int i = 0;(i < arr.length - 1)&& changed;i++){   // 只是剩下一个元素的数组的时候 不用进行冒泡扫描
          changed = falsefor(int j = 0;j < arr.length - 1 - i;j++) { // 本次扫描的数组的大小,都在变小,需要保证j+1的值在数组的范围
          if (arr[j] > arr[j+1])   {          // 逆序则交换,这里是按照升序排列
              swap(arr, j, j+1);
              changed = true;
           }
        }
    }

    public static void swap(int[] arr,int i,int j){
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

}

 

 

posted @ 2021-02-22 00:13  先飞鸟  阅读(90)  评论(0)    收藏  举报