想请大佬们看下我写的这个冒泡排序哪有问题
public class Bubble_Sort {
public static void main(String[] args) {
int[] arr = {12, 34, 45 ,56 ,14} ;
for (int i = 0; i < (arr.length -1); i++) {
for (int i1 = 0; i1 < (arr.length - i); i1++) {
if(arr[i1] > arr[i1 + 1]){
int temp = arr[i1];
arr[i1] = arr[i1 + 1];
arr[i1 + 1] = temp ;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
D:\Java\JDK\bin\java.exe "-javaagent:D:\java\IDEA\IntelliJ IDEA 2021.2.1\lib\idea_rt.jar=4325:D:\java\IDEA\IntelliJ IDEA 2021.2.1\bin" -Dfile.encoding=UTF-8 -classpath D:\java\java_code\out\production\arr study.Bubble_Sort
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
at study.Bubble_Sort.main(Bubble_Sort.java:9)
在第一个for循环中 , 改为for(int i = 1 ; i <= (arr.lengthh - 1) ; i++) 就可运行
我感觉这两种形式是一样的,但不知道问什么第一个会报错
索引越界异常,当i=0时,运行到 if(arr[i1] > arr[i1 + 1]) i1达到最大arr[i1+1] 超出了arr的大小
你看你第二个for循环里,i一开始是等于0,也就是说你i1<5,那么arr[i1+1]在i1等于4的时候就是arr[5],索引越界了,当然报错。
第二层循环多了一次,-1-i就行