冒泡排序:
/**
* 冒泡排序
*
* @author small_shrimp_
*/
public class BubbleSort {
public static void main(String[] args){
int[] arr = {1,5,3,6,2,4,7,9,0,8};
// boolean flag = false;
for(int i = 0; i < arr.length - 1; i++){
for(int j = 0; j < arr.length - 1 - i; j++){
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
// flag = true;
}
}
// if(!flag){
// break;
// }
}
for(int num : arr){
System.out.print(num + "\t");
}
}
}
for循环的理解:
通过观察上图,我们可以得到外层循环(轮数)是数组长度-1,内层循环(次数)是数组长度-1,然后再减去轮数。
for(int i = 0; i < arr.length - 1; i++){
for(int j = 0; j < arr.length - 1 - i; j++){
因为数组的第一个元素的索引是0(arr[0]),所以我们的循环变量初始值为0。
交换值的理解:
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
这种通过创建临时变量交换值的方式,可以理解为,你想要置换一杯可乐和牛奶,然后通过一个空杯子,那么就要将可乐(牛奶)倒入空杯子,然后再将牛奶(可乐)倒入装可乐(牛奶)的杯子,最后将空杯子里面的可乐(牛奶)倒入装牛奶(可乐)的杯子,完成置换。
代码中我注释掉的部分,是用来优化冒泡排序的,优化的地方是排除有序数组,例如 int[] arr = {1,2,3,4,5}