- 冒泡排序算法运行起来非常的慢,但是在概念上它是排序算法中最简单的,因为冒泡排序算法在刚开始研究排序技术时是一个非常好的算法
使用冒泡排序对一个班的学生进行排序
- 如果人近视的像计算机程序一样,只能看到站在他面前两个相邻的同学,在这种困难的情况下,如何对同学进行排序呢?假设n个学生,并且按照从左到右分别编号,从0-n-1。
- 冒泡排序的流程如下,从最左边的同学,也就是0号同学开始比较,最开始比较的是0到1,那么0号高与1号的话。就换成一号的位置,然后继续向后比较,如果左边得高就继续交换位置,排序过程如图!

以下是规则 - 1.比较两个同学
- 2.如果左边得同学高,则两个同学交换位置
- 3.向右移动一个位置,继续比较右边的同学,如果右边的同学高则用右边的同学比较
- 4.按照这个顺序一直比较下去,一直比较到队伍的最右端,虽然没有完全把所有的队员都排好序,但是已经确定最右边的那个同学是最高的,因为在比较的时候,只要遇到高的球员才会交换位置,直到最右边
- 这个也是称为冒泡排序的原因,因为在执行算法的时候,最大的数据项的总是“冒泡”到数组的最顶端
第一次排序的结果
在对所有的同学进行了第一次比较之后,进行了n-1次比较,并且按照队员的开始位置进行了最少0次,最多进行了n-1次比较,数组最末端的那个数据项就此确定,不需要移动了。
同上进行第二次比较,再一次的从左到右,两两比较,并且在适当的时候交换了位置,这一次最终只需要比较到右边的第二个同学的位置(n-2),因为最高的已经站在了最后的位置(n-1),
在不断的执行这个过程中,所有的队员都排定。
上代码
int[] arr = {12, 102, 28, 78, 45, 63, 45, 21, 4, 1, 52, 49, 88, 36, 2, 35, 61, 44, 66, 46};
int len = arr.length;
int temp;
// len - 1 是因为最大的下标为数组的长度减一
for (int i = 0; i < len - 1; i++) {
// len-i-1我上面说了是因为第一次循环是n-1 第二次是n-2 ....
for (int j = 0; j < len - 1 - i; j++) {
// 从左边得第一个和第二个依次进行比较 如果左边大于右边则进行下面的交换否则继续运行
if (arr[j] > arr[j + 1]) {
// 如果第一个大于第二个 就先存进temp
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int k = 0;k<arr.length;k++){
System.out.print(arr[k]+",");
}
输出

冒泡排序的效率
通过上面的比较 我们会发现,第一次比较进行了n-1次比较,第二次进行了n-2次比较,以此类推,最后进行了一次比较
这种排序算法的速度是很慢的,但是在排序算法中它无疑是最简单的也是一个比较经典的排序算法
289

被折叠的 条评论
为什么被折叠?



