算法与数据结构--冒泡排序

目录

1、冒泡排序的原理

2、过程分析

3、参考代码


1、冒泡排序的原理

  • 循环比较相邻的元素,将小的放到前面
  • 进行n-1轮比较,完成排序

     冒泡排序举例:{8 , 2 , 3 , 7 , 1}的排序过程如下所示:

          数组:   array={8 , 2 , 3 , 7 , 1}

          第1轮: array={2 , 3 , 7 , 1 , 8}

          第2轮: array={2 , 3 , 1,  7 | 8}

          第3轮: array={2 , 1 | 3,  7 , 8}

          第4轮: array={1 | 2 , 3 , 7 | 8}

2、过程分析

  • i 代表次数
  • j 代表比较位置
array i j j + 1 array[j] array[j + 1] array[j]>array[j + 1] [j]交换[j + 1]
1
{8,2,3,7,1} [0] [0] [1] 8 2 TRUE 8<->2
{2,8,3,7,1} [0] [1] [2] 8 3 TRUE 8<->3
{2,3,8,7,1} [0] [2] [3] 8 7 TRUE 8<->7
{2,3,7,8,1} [0] [3] [4] 8 1 TRUE 8<->1
{2,3,7,1|8}
2
{2,3,7,1|8} [1] [0] [1] 2 3 FALSE --
{2,3,7,1|8} [1] [1] [2] 3 7 FALSE --
{2,3,7,1|8} [1] [2] [3] 7 1 TRUE 7<->1
{2,3,1|7,8}
3
{2,3,1|7,8} [2] [0] [1] 2 3 FALSE --
{2,3,1|7,8} [2] [1] [2] 3 1 TRUE 3<->1
{2,1|3,7,8}
4
{2,1|3,7,8} [3] [0] [1] 2 1 TRUE 2<->1
{1|2,3,7,8}
结果
{1,2,3,7,8}
  • i 的取值范围是: i = 0 ~ < array.length - 1
  • j 的取值范围是: j = 0 ~ < array.length - i -1
  • 交换步骤伪代码如下:
    if([j]>[j+1]){ 
        [j]<->[j+1] 
    }

3、参考代码

    public static void main(String[] args) {
        int[] array = {8, 2, 3, 7, 1};
        System.out.println(Arrays.toString(bubbleSort(array)));
    }

    private static int[] bubbleSort(int[] array) {
        for (int i = 0; i < array.length - 1; i++) {
            for (int j = 0; j < array.length - i - 1; j++) {
                if (array[j] > array[j + 1]) {
                    int tmp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = tmp;
                }
            }
        }
        return array;
    }
    --------------输出结果-------------
    [1, 2, 3, 7, 8]

 

你可能感兴趣的:(算法)