zoukankan      html  css  js  c++  java
  • 冒泡排序

    不知道怎么了,今天拿起关于冒泡排序的知识,但是突然忘记了。基础没搞好,真丢人,赶紧想,算,还用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的数组开始比较相邻的两个元素,直至最后一轮。

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

  • 相关阅读:
    C primer plus 摘抄(第三章 数据和C)
    lambda表达式+python内置函数
    补充(pass)
    If语句和while语句
    解释器和编译器的区别
    关于python编码
    初识Python
    unity学习(一)ide窗口
    unity学习
    redis实践 —— redisReply简析
  • 原文地址:https://www.cnblogs.com/iPeterRex/p/3486708.html
Copyright © 2011-2022 走看看