算法-排序-冒泡排序

文章将会同步到个人微信公众号:Android部落格

1.1 概述

排序使用了两层循环,第一层从0到数组大小;第二层从0开始,依次比较index后一个和前一个的大小,只要后面的元素比前面元素大,就把它们交换过来。

走访数列的工作是重复地进行直到没有再需要交换,直到排序完成。

1.2 描述

  • 比较相邻的元素。如果第一个比第二个大,就交换它们两个;

  • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;

  • 针对所有的元素重复以上的步骤,除了最后一个;

  • 重复步骤1~3,直到排序完成。

1.3 代码

属于比较排序,时间复杂度为n的平方。

代码如下:

public class BubbleSort {
    //    private static int[] number = {5, 8, 3, 6, 9, 10, 34, 1, 7, 12, 65, 4, 23, 2, 16, 15, 76, 56, 8};
    private static int[] number = {5, 8, 3, 6, 9, 10, 34, 1, 7, 6};
    private static String TAG = "BubbleSort";

    public static void bubbleSort() {
        int size = number.length;
        int compareCount = 1;
        Log.d(TAG, "sorted compare index 0 is " + Arrays.toString(number));
        for (int i = 0; i < size - 1; i++) {
            for (int j = 0; j < size - 1 - i; j++) {
                if (number[j + 1] < number[j]) {
                    int temp = number[j + 1];
                    number[j + 1] = number[j];
                    number[j] = temp;
                    Log.d(TAG, "sorted compare index " + (compareCount++) + " is " + Arrays.toString(number));
                }
            }
        }
        for (int temp : number) {
            Log.d(TAG, "sorted number is:" + temp);
        }
    }
}

1.4 总结

时间复杂度为n的平方,空间复杂度为1。

稳定排序。

示意图如下: