您的位置:首页 > 其它

邻居好说话 之 冒泡排序

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

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

第一轮首先处理第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;
}
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  排序算法总结