冒泡排序,时间复杂度,优化_听韩顺平课笔记

1.冒泡排序的思想

  • 设置双重循环 i = 0; j = 0;
    • 外层循环确定要排序的轮数:arr.length-1轮(倒数第二个元素排序完成时,数组已经有序了)
    • 内层循环从数组的第一个位置开始,依次比较相邻的两个值,一直到到当前的数组的最后一个位置,每经过一次外层循环,下一轮比较的次数就减一,j=arr.length-i-1。

2.冒泡排序的时间复杂度O(n^2)

3.冒泡排序的优化

  • 设置一个flag标记,当有一轮比较中,没有发生数据的交换时,说明当前数组已经有序,则排序完毕,直接跳出循环

4.冒泡排序的实现

package 算法.排序;

import java.util.Arrays;

public class BubbleSort {
    public static void main(String[] args) {
        int[] arr = new int[8];

        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int)(Math.random()*100+1);
        }
        System.out.println("排序前的数组如下:"+Arrays.toString(arr));
        bubbleSort(arr);
        System.out.println("排序后的数组如下:"+Arrays.toString(arr));

    }
    static void bubbleSort(int[] arr){
        int temp = 0;

        for (int i = 0; i < arr.length-1; i++) {
            boolean flag = false;
            for (int j = 0; j < arr.length-i-1; j++) {
                if (arr[j]>arr[j+1]){
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                    flag = true;
                }
            }
            if (!flag){
                System.out.println("冒泡排序已完成,提前结束");
                break;
            }
        }
    }

}
posted @ 2021-09-25 14:15  CH0701  阅读(127)  评论(0)    收藏  举报