来源:http://www.bjsxt.com/
1、S02E122_01冒泡排序
package com.test.sort.bubble;
import java.util.Arrays;
/**
* 冒泡排序(bubble sort):此例实现升序排序
* <br>简易版:每个数都与其它数比较大小
* <br>优化版:减少每趟次数,之前比较过的不再比较
* <br>最终版:考虑有序,减少趟数
*/
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {3,4,9,2,1};
sort1(arr);
arr = new int[] {3,4,9,2,1};
sort2(arr);
arr = new int[] {9,1,2,3,4};
sort3(arr);
}
/**
* 简易版simple
*/
public static void sort1(int[] arr){
System.out.println("*************简易版simple*************");
int len = arr.length;
for (int i = 0; i < len - 1; i++) {//趟数
System.out.println("第" + (i+1) + "趟");
for (int j = 0; j < len - 1; j++) {//次数
System.out.print("第" + (j+1) + "次");
if(arr[j] > arr[j+1]){
int temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
System.out.println(Arrays.toString(arr));
}
}
}
/**
* 优化版optimized
*/
public static void sort2(int[] arr){
System.out.println("*************优化版optimized*************");
int len = arr.length;
for (int i = 0; i < len - 1; i++) {//趟数
System.out.println("第" + (i+1) + "趟");
for (int j = 0; j < len - 1 - i; j++) {//次数,-i减少每趟次数
System.out.print("第" + (j+1) + "次");
if(arr[j] > arr[j+1]){
int temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
System.out.println(Arrays.toString(arr));
}
}
}
/**
* 最终版final
*/
public static void sort3(int[] arr){
System.out.println("*************最终版final*************");
int len = arr.length;
boolean issort = true;
for (int i = 0; i < len - 1; i++) {//趟数
issort = true;//假定有序
System.out.println("第" + (i+1) + "趟");
for (int j = 0; j < len - 1 - i; j++) {//次数,-i减少每趟次数
System.out.print("第" + (j+1) + "次");
if(arr[j] > arr[j+1]){
int temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
issort = false;//有交换,假定失败
}
System.out.println(Arrays.toString(arr));
}
if(issort){
break;
}
}
}
}
***简易版simple*************
第1趟
第1次[3, 4, 9, 2, 1]
第2次[3, 4, 9, 2, 1]
第3次[3, 4, 2, 9, 1]
第4次[3, 4, 2, 1, 9]
第2趟
第1次[3, 4, 2, 1, 9]
第2次[3, 2, 4, 1, 9]
第3次[3, 2, 1, 4, 9]
第4次[3, 2, 1, 4, 9]
第3趟
第1次[2, 3, 1, 4, 9]
第2次[2, 1, 3, 4, 9]
第3次[2, 1, 3, 4, 9]
第4次[2, 1, 3, 4, 9]
第4趟
第1次[1, 2, 3, 4, 9]
第2次[1, 2, 3, 4, 9]
第3次[1, 2, 3, 4, 9]
第4次[1, 2, 3, 4, 9]
***优化版optimized*************
第1趟
第1次[3, 4, 9, 2, 1]
第2次[3, 4, 9, 2, 1]
第3次[3, 4, 2, 9, 1]
第4次[3, 4, 2, 1, 9]
第2趟
第1次[3, 4, 2, 1, 9]
第2次[3, 2, 4, 1, 9]
第3次[3, 2, 1, 4, 9]
//4和9比较过了,不再比较
第3趟
第1次[2, 3, 1, 4, 9]
第2次[2, 1, 3, 4, 9]
//3和4比较过了,不再比较
//4和9比较过了,不再比较
第4趟
第1次[1, 2, 3, 4, 9]
//2和3、4、9比较过了,不再比较
***最终版final*************
第1趟
第1次[1, 9, 2, 3, 4]
第2次[1, 2, 9, 3, 4]
第3次[1, 2, 3, 9, 4]
第4次[1, 2, 3, 4, 9]
第2趟
第1次[1, 2, 3, 4, 9]
第2次[1, 2, 3, 4, 9]
第3次[1, 2, 3, 4, 9]
//3次都没交换(第四次4和9比较过了),有序了就不再比较了。