入门算法之中国好邻居:冒泡排序

上文我们聊到桶排序,了解到虽然桶排序简单,快速,但是同时也有其致命的缺点:那就是空桶对内存空间的极大浪费以及只能针对正整数排序;所以我们需要一个较好的算法来解决这两个问题,接下来我们就来认识一个新的算法:冒泡排序。

 

先上代码实现:

public class BubbleSort {

    public static void main(String[] args) {
        // 1.等待排序的数组
        int[] waitNumbers = {3,15,8,13,6,35};
        // 2.定义一个临时变量
        int temp;
        // 3.冒泡趟数
        for (int i = 0; i < waitNumbers.length - 1; i++) {
            for (int j = 0; j < waitNumbers.length - i - 1; j++) {
                if (waitNumbers[j + 1] < waitNumbers[j]) {
                    temp = waitNumbers[j];
                    waitNumbers[j] = waitNumbers[j + 1];
                    waitNumbers[j + 1] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(waitNumbers));
    }
}
结果:[3, 6, 8, 13, 15, 35]
如果你想从大到小的顺序排序就将判断条件换下即可;

分析(已从小到大为例):从第一个数开始,拿第一个数依次与相邻的两个数比较,如果后面一位小于前面一位就将这两个数字的位置互换,经过第一次冒泡之后,我们就能将最大的那位数字排到了最后一位;

第二轮,继续从第一个数开始,相邻比较直到倒数第二位结束,就将第二大的数排到了倒数第二位;

依次类推下去:我们将能将数字从小到大排序;

案例中i就代表需要遍历的轮数,j代表每一轮的遍历,整个过程类似冒泡将最大的数依次冒出水面,因此得名:冒泡算法

冒泡算法的核心:双重嵌套循环,我们不难发现该算法的时间复杂度为:O(N²)这个时间复杂度是比较高的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章