初级:
public static int[] sortMaoPao1(int[] arr){
int count1 = 0, count2 = 0;
int len = arr.length;
for (int i = 0; i < len -1; i++) {
for (int j = 0; j < len - 1 - i; j++) {
// 从小到大排序
if(arr[j + 1] < arr[j]){
System.out.println("交换了:" + arr[j] + "和" + arr[j+1]);
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
count1++;
}
count2 ++;
/* // 从大到小排序
if(arr[j + 1] > arr[j]){
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}*/
}
}
System.out.println("count1:" + count1); // 5
System.out.println("count2:" + count2); // 45 = 9+8+7+6+5+4+3+2+1,其中arr.length = 10
return arr;
}
中级:
public static int[] sortMaoPao2(int[] arr){
int count1 = 0, count2 = 0;
int len = arr.length;
for (int i = 0; i < len -1; i++) {
boolean flag = true;
for (int j = 0; j < len - 1 - i; j++) {
// 从小到大排序
if(arr[j + 1] < arr[j]){
System.out.println("交换了:" + arr[j] + "和" + arr[j+1]);
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
count1++;
flag = false;
}
count2++;
/* // 从大到小排序
if(arr[j + 1] > arr[j]){
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}*/
}
// flag == true,说明 if(arr[j + 1] < arr[j]) 程序未执行,即不会改变flag,所以直接break
if(flag == true){
break;
}
}
System.out.println("count1:" + count1); // 5
System.out.println("count2:" + count2); // 30 = 9+8+7+6,循环次数明显减少
return arr;
}
高级:
public static int[] sortMaoPao3(int[] arr){
int count1 = 0, count2 = 0;
int lastOutOfIndex = 0;
int len = arr.length;
int sortBorder = len - 1;
for (int i = 0; i < len -1; i++) {
boolean flag = true;
for (int j = 0; j < sortBorder; j++) {
// 从小到大排序
if(arr[j + 1] < arr[j]){
System.out.println("交换了:" + arr[j] + "和" + arr[j+1]);
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
count1++;
flag = false;
lastOutOfIndex = j;
}
count2++;
/* // 从大到小排序
if(arr[j + 1] > arr[j]){
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}*/
}
sortBorder = lastOutOfIndex;
// flag == true,说明 if(arr[j + 1] < arr[j]) 程序未执行,即不会改变flag,所以直接break
if(flag == true){
break;
}
}
System.out.println("count1:" + count1); // 5
System.out.println("count2:" + count2); // 20,循环次数明显减少
return arr;
}
测试实例:
public static void main(String[] args) {
int[] arr = {1,4,2,6,7,3,23,12,63,171};
arr = sortMaoPao3(arr);
System.out.println(Arrays.toString(arr));
}
理论请参考:图解冒泡