A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

我很早就以为自己了解了冒泡排序,可是最近有自己看了看算法,对于 x 和 y 在循环时候的条件语句的确定有点晕了。给位有什么高见,指点指点。

代码如下:
(注释是我自己的看法)

package com.itheima;

public class maopao
{
        public static void main (String[] args)
        {
                int[] arr = {3, 5, 1, 9, 7};                //定义数组并且赋值。
               
                System.out.println("排序前数组: ");               
                printArray(arr);                                        //调用遍历数组函数
                System.out.println("排序后数组: ");
                bubbleSort(arr);                                        //调用冒泡排序函数
                printArray(arr);                                        //再次调用遍历数组函数
        }
       
        public static void printArray(int[] arr)                //遍历数组然后进行输出
        {
                System.out.print("[");
                for (int i = 0; i < arr.length; i++)
                {
                        if (i != arr.length-1)                                  //对除了最后一个元素的输出做特殊处理
                        {                                                                                               
                                System.out.print(arr[i] + ",");           //输出他们并且带有“,”
                        }
                        else
                        {
                                System.out.println(arr[i] + "]");     //最后一个元素的输出不能再带“,”
                        }
                }
        }
       
        public static void bubbleSort(int[] arr)                //使用冒泡法对数组遍历并排序
        {
                for (int x = 0; x < arr.length-1; x++)                //x 控制循环的次数,但是 x 表示的数组元素的下标,所以 x 的条件是 x < arr.length - 1(在这里是0, 1, 2, 3 四个数)
                {
                        for (int y = 0; y < arr.length - x - 1; y++)                //y 控制每次循环中具体比较大小的两个数,他表示的也是两个数的下标
                        {
                                if (arr[y] > arr[y + 1])                        //这里是两个循环条件的关键所在。因为两个进行比较的数的下标都是用 y 进行表示的。
                                {                                                                        //那么 y 第一次循环就只能走到倒数第二个数,后边还有一个 y+1。倒数第二个数的下标是3。而在第二次循环的时候,y 就
                                        int temp = arr[y];                                //只能走到倒数第三个数了。综上 y 的条件是 y < arr.length - x - 1
                                        arr[y] = arr[y + 1];
                                        arr[y + 1] = temp;
                                }
                        }
                }
        }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马