冒泡排序

不知道怎么了,今天拿起关于冒泡排序的知识,但是突然忘记了。基础没搞好,真丢人,赶紧想,算,还用excel分步写一些东西整理思路,但好像怎么也想不起来了。

看了很多文章,才回忆起来。

某篇文章中的视频很不错,可以看一下:

http://www.tudou.com/v/htKY1-Rj9ZE

http://t.cn/8kY4E5o

看完两个视频,才真正理解某些知识库中关于冒泡排序的思路。就是从数组中第一个元素开始与后一个元素比较,将元素数值较大的放在后一个位置。第一个元素和第二个元素比较,看是否交换;然后,第二个元素和第三个元素比较,看是否交换;然后,第三个元素和第四和比较,看是否交换;以此类推。

第一轮两两比较,需要(数组总个数 - 1)那么多次;

第二轮两两比较,由于最大的已经沉到了最后,需要比较的次数比上一次少了一次;

...

直至不需要比较。

共计需要的轮数与第一轮次数相等。

最后就在大脑中建立了冒泡排序的基本模型,然后用代码去实现它。

附上一段经过艰苦回忆才想起来的Java代码。

 1 import java.util.Arrays;
 2 public class ClassT {
 3     public static void main(String[] args) {
 4         int[] a = {7,4,2,5,1};
 5         System.out.println(a.length);
 6         for (int outer = a.length - 1; outer > 0; outer--) {
 7             for (int inner = 0 ; inner < outer; inner++) {
 8                 if (a[inner] > a[inner+1]) {
 9                     int tmp = a[inner+1];
10                     a[inner+1] = a[inner];
11                     a[inner] = tmp;
12                 }
13             }
14         }
15         System.out.println(Arrays.toString(a));
16     }
17 }

主要难点在两个for 循环,内外循环控制好比较的轮数和次数。

第一个循环控制比较的次数。通过我们在大脑中建立的模型,可以用外循环控制轮数,内循环控制比较的次数。

外循环控制轮数,越比较越少,共需要(a.length - 1)轮;内循环需要想一番,需要控制次数,同时还要被下标使用。所以inner初始值用0,而比较的次数正好与轮数相同,所以终止值用outer,步长为 1 。

然后像舞蹈视频中一样,每轮都从下标为0的数组开始比较相邻的两个元素,直至最后一轮。

这么简单一个算法,居然忘记了。让大家见笑了。

原文地址:https://www.cnblogs.com/iPeterRex/p/3486708.html