冒泡排序(Java)

被刻印的时光 ゝ 提交于 2020-02-07 01:32:43

一. 概念

把相邻的两个元素进行比较,当一个元素大于右侧相邻元素时,交换他们的位置;否则,位置不变。

二. 举例

  1. 常规的冒泡排序——时间复杂度为O(n^2)
    • 原始数列
      在这里插入图片描述

    • 进行第一趟排序
      在这里插入图片描述

    • 第一趟排序后的结果
      在这里插入图片描述

    • 进行第二趟排序
      在这里插入图片描述

    • 第二趟排序后的结果
      在这里插入图片描述

    • 第三到七趟的排序结果
      在这里插入图片描述

  2. 冒泡排序改进
    改进1:在第六轮排序后,整个数列已经有序,无需进行第七轮排序 ;
    改进2:右边的很多元素已经排序过,已经是有序的,无需每次都比较。

三. Java实现

  • 代码

    import java.util.Arrays;
    
    public class MySort {
        public static void sort (int[] array) {
            //最后一次交换的位置
            int lastExchangeIndex = 0;
            //无序数列的边界,每次比较到此为止
            int sortBorder = array.length - 1;
            for (int i = 0; i < array.length - 1; i++) {
                //有序标记,每一轮的初始值都是true
                boolean isSorted = true;
                for (int j = 0; j < sortBorder; j++) {
                    int temp = 0;
                    if (array[j] > array[j+1]) {
                        temp = array[j];
                        array[j] = array[j+1];
                        array[j+1] = temp;
                        //有元素交换,故不是有序数列,标记为false
                        isSorted = false;
                        //更新为最后一次交换元素的位置
                        lastExchangeIndex = j;
                    }
                }
                sortBorder = lastExchangeIndex;
                if (isSorted) {
                    break;
                }
            }
        }
    
        public static void main(String[] args) {
            int[] array = new int[] {5,8,6,3,9,2,1,7};
            sort(array);
            System.out.println(Arrays.toString(array));
        }
    }
    
  • 运行结果:

    [1, 2, 3, 5, 6, 7, 8, 9]
    
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!