里面两种循环差不多
public class Code01_BubbleSort {
/**
* 为什么是j<(length-1-i)呢?
* -1就不解释了,主要是这个-i,
* 因为i代表的是轮数,第一轮比较完毕之后都会有一个最大的数到顶端刚才上面解释过,
* 那么第二轮比较的时候,那个最大的数就不要考虑进去继续比了,以此类推随着i的增长需要比较的数就会越来越少。
* @param arr
*/
public static void bubbleSort(int [] arr){
if(arr == null || arr.length <2){
return ;
}
int N = arr.length;
//这里的循环从0开始,或者从最后一个开始都行
//只是从后面开始循环,为了让内层循环在一次循环之后,不需要去交换最后一个值,因为最后一个经过一次排序是最大值
for (int end = N-1; end >=0 ; end--) {
//这里从1开始,其实就是从数组的第二个值拿出来和前一个做比较,符合条件,交换
for (int second = 1; second <= end; second++) {
if(arr[second -1] > arr[second]){
swap(arr,second-1,second);
}
}
}
/*for (int i = 0; i < arr.length - 1 ; i++) {
for (int j = 1 ; j <= arr.length - 1 - i; j++) {
if(arr[j-1] > arr[j]){
swap(arr,j-1,j);
}
}
}*/
}
public static void swap(int arr[],int i,int j){
int tmp = arr[i];
arr[i]= arr[j];
arr[j] = tmp;
}
public static void printSort(int[] arr){
if(arr == null){
return ;
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
public static void main(String[] args) {
int[] arr = {4,3,6,8,7,1,9,2,5};
printSort(arr);
bubbleSort(arr);
printSort(arr);
}
}