交换排序-冒泡排序

2018-04-15  本文已影响0人  码码Master

简述

冒泡排序就如同水中的水泡往水面上浮过程一样,越来越大。冒泡排序是最简单的交换排序,通过两两相邻比较,如果发生逆序则进行交换,如此循环,直至全部排序成功

算法思想

  1. 设定排序数组为r[0··n-1]中,一共n个待排序数。第一躺排序:首先将r[0]与r[1]进行比较,若逆序,则交换r[0]与r[1],然后将r[1]与r[2]进行比较,逆序则交换,一次类推,直到r[n-2]与r[n-1]比较判断后,第一趟排序结束,最后一个数字则最终排序的最后一位值。
  2. 第二趟排序,则是将r[0]到r[n-1],第一步方法进行排序,得到最终排序的r[n-2]位值。
  3. 重复上述比较过程,知道某一趟,没有进行交换为止,说明已经排序结束。

算法实现

public void sort() {
        //待排序数组
        int[] ints = new int[]{1, 33, 44, 55, 6, 2, 3, 22, 77, 88, 123, 54};

        //从小到大
        //最大比较n-1趟
        for (int i = 1; i <= ints.length; i++) {
            System.out.println("第" + i + "趟排序");
            boolean hasChange = false;
            //每一趟比较0到j
            for (int j = 0; j < ints.length - i; j++) {
                if (ints[j] >= ints[j + 1]) {
                    int temp = ints[j];
                    ints[j] = ints[j + 1];
                    ints[j + 1] = temp;
                    hasChange = true;
                }
            }

            if (!hasChange) {
                System.out.println("没有交换,排序完成");
                break;
            }
        }

        for (int intTemp : ints) {
            System.out.print(intTemp + " ");
        }
    }

算法实现一般是两重循环,外层是控制躺数,内层控制比较数。具体如何控制可根据自己的想法去实现。

算法分析

所以,最好和最坏平均一下,那么平均情况下,冒泡排序记录移动次数为n2/4和3n2/4。时间复杂度为O(n2)

算法特点

冒泡可以说是最基本的排序手法之一。这个手法想必是各种语言学习的时候都有所使用的,对咱们排序思想有启发作用。

上一篇 下一篇

猜你喜欢

热点阅读