美文网首页
Java基础01 冒泡排序

Java基础01 冒泡排序

作者: 小心陨石 | 来源:发表于2017-02-28 20:31 被阅读0次

    冒泡排序

    Java中有很多种排序:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还有基数排序、鸡尾酒排序、桶排序、鸽巢排序、归并排序等。本文给大家介绍的是冒泡排序。
    1、在冒泡排序中,对数组中相邻位置的元素进行两两比较,较小的数或者较大的数向后移,本文采用的是较大的数向后移。以下是冒泡排序的例子。

       //冒泡排序
      int[] arr1 = {5, 3, 2, 6, 1};
      for (int i = 0; i <arr1.length -1 ; i++) {
                for (int j = 0; j <arr1.length - 1 - i ; j++) {
                    if (arr1[j] > arr1[j + 1]) {
                        int temp = arr1[j];
                        arr1[j] = arr1[j + 1];
                        arr1[j + 1] = temp;
                    }
                }
            }
             for (int i = 0; i <arr1.length ; i++) {
            System.out.println(arr1[i]);
        }
    

    以下是排序执行过程中各数字位置的变化

      第一次:        3 5 2 6 1
                     3 2 5 6 1
                     3 2 5 6 1
                     3 2 5 1 6   
      
     第二次:         2 3 5 1 6
                     2 3 5 1 6
                     2 3 1 5 6
    
     第三次:         2 3 1 5 6
                     2 1 3 5 6
    
     第四次:         1 2 3 5 6
    

    在上面的例子中,我们定义了一个数组,对数组进行排序,然后按照从小到大的顺序输出数组。

    我们可以看到,冒泡排序主要是由for循环嵌套以及if语句组成,for循环是根据判断条件内容来检查是否要继续执行循环,而判断条件是冒泡排序最核心的部分。

    以下是关于if中代码的解释:
    将数组中相邻的两个元素经济比较,较大的数向后移。

    下面来解释以下两个for循环中判断条件的书写依据:
    一、在第一个for循环中,i的限定条件为arr1.length-1,即数组的长度减一,这个条件是用来限定第二个循环执行的次数,从上面的数字顺序变化的结果中可以看出:在第一次内循环执行的过程中,找到了最大的那个数,依次类推,当第四次的时候,找到了第四大的数,同时也找到了最小的数,它一次性的找到了两个位置的数,就不需要第五次循环了,所以第一个for循环的限定条件为数组长度减一。
    二、在第二个for循环中,arr1[3]和arr1[4]比较是第一次循环中的最后一次比较,在此次比较中会找到最大的数,在以后的比较中,最后一位就不需要再进行比较了,所以第二次循环中进行比较的数字只有四个,依次类推,每次比较的数都会少一个,即 j 最大值也依次递减,而是递增,所以是arr1.length-i,因为在下面的if判断中有arr1[j + 1]的存在,所以判定条件要再减一,否则会出现Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException,即数组越界的错误。

    相关文章

      网友评论

          本文标题:Java基础01 冒泡排序

          本文链接:https://www.haomeiwen.com/subject/uwgxgttx.html