冒泡排序

来源:互联网 发布:合肥组装电脑淘宝 编辑:程序博客网 时间:2024/06/03 05:13

什么是冒泡?

每次比较【相邻】两个元素,若【顺序】错误就对把它们的位置互换。其中【顺序】指定是:从小到大或者从大到小。

注意:

趟数越靠后,需要两两比较的数越少,而不需要每趟都和全部数比较。

原理:

每一趟只能确定一个数归位。第一趟只能确定末尾的数,第二趟只能确定倒数第二位的数,以此类推。

根据它的原理,我们可以总结出:

有 x 个数需要排序,只需要将 x -1 个数归位(若还不明白,就自己手写下每一步操作)。而已经归位的数则无需比较,浪费性能。

代码说话

    public void sort(int... sortNums) {        // 总共需要比较的趟数。因为最后一位数之后,已经没有和它相邻的数(即已归位)。so 总趟数为:总个数 - 1        final int count = sortNums.length - 1;        for (int i = 0; i < count; i++) {            // 该内循环遍历完,就有一位“最”值归位。 其中“最”,指的是当前这趟的“最”值,而不是全部数据中的“最”值            // 因此越往后面走,需要比较的次数越少。因为后面的数已经归位了,已经在它应该在的位置了,所以不需要和它比较            // 当前这趟,需要进行两两比较的数,即仅和未归位的数比较。            for (int j = 0; j < count - i; j++) {                // 相邻的数进行比较。顺序不对,进行互换                // 当前排序规则为:从小到大。若需要从大到小,则使用 < 号,即【sortNums[j] < sortNums[j + 1]】                if (sortNums[j] > sortNums[j + 1]) {                    int flag = sortNums[j];                    sortNums[j] = sortNums[j + 1];                    sortNums[j + 1] = flag;                }            }        }    }

时间复杂度

O(N2)
这是一个很高的时间复杂度。

0 0
原创粉丝点击