我很早就以为自己了解了冒泡排序,可是最近有自己看了看算法,对于 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;
}
}
}
}
} |
|