邻居好说话 之 冒泡排序

冒泡排序的主要思想就是:每次比较两个相邻的元素,如果它们比较大小之后,左右的顺序错误,就相互交换位置。


下面以从大到小排序为例,来讲一下它的思路:

第一轮首先处理第1个数和第2个数,使这两个数从大到小排列,然后在前次处理后的基础上处理第2个数和第3个数使其从大到小排列,以此类推,直到处理完第n-1个和第n个数,这样第一轮处理结束。
一个循环结束之后,得到的序列中的最后一个数,也就是第n个数必定是最小的数。

重复上面的步骤,进行第二轮的两两比较。一轮结束后,得到的第(n-1)个数就是列表中的第二小。

以此类推重复上面的步骤,直到第(n-1)轮之后,所有的数都排序好了。

下面举个简单的比较例子:
12,35,99,18,76
第一轮:
这一轮从左往右依次两两比较,进行四轮
35,12,99,18,76
35,99,12,18,76
35,99,18,12,76
35,99,18,76,12
这时候,12肯定就是最小的一个数,因为它比其它比较过的数字都小
第二轮:
这一轮,只需要比较12之前的四个数字,进行三轮两两比较
99,35,18,76,12
99,35,18,76,12
99,35,76,18,12
第三轮:
这一轮只需要比较18,12之前的三个数字,进行两轮两两比较
99,35,76,18,12
99,76,35,18,12
第四轮:
这一轮只需要比较35,18,12之前的两个数字的大小即可。
99,76,35,18,12
这时候,所有的比较就进行完了,最终结果就是上面这个。


我们可以看到,假设有n个数字作比较,那么大的循环轮数为(n-1)次,
而每一轮,进行两两比较的次数为 (n-已经排好序的i)次。
因此说,冒泡排序的核心算法就是 嵌套循环

代码如下:

public class BubbleSort {

    public static void main(String[] args) {
        int a[] = { 96, 15, 67, 83, 16, 45 };
        sort(a);
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i] + ",");
        }
    }

    public static void sort(int[] a) {
        int temp = 0;
        //i < a.length - 1:表示假设总共n个数字,排序好需要(n-1)次大的循环
        for (int i = 0; i < a.length - 1; i++) {
            //a.length - 1 - i 表示:当前只需要在这个循环中执行几次两两对比   
            //次数为:当有i次执行,i个数的大小被排好,则我们需要n-i次两两对比
            for (int j = 0; j < a.length -1 - i; j++) {
                if (a[j] < a[j + 1]) {
                    temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                }
            }
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值