废话小说,看代码:
import java.util.Date; public class BubbleSort { // 冒泡排序正常做法 static void bubbleSort1(int a[]) { int temp; for (int i = 0; i < a.length; i++) for (int j = 1; j < a.length - i; j++) if (a[j - 1] > a[j]) { temp = a[j]; a[j] = a[j - 1]; a[j - 1] = temp; } } // 防止排达的重新排冒泡排序,设置一个标志,如果这一趟发生了交换,则为true,否则为false。如果有一趟没有发生交换,说明排序完成 static void bubbleSort2(int a[]) { int temp; boolean flag = true; int k = a.length; while (flag) { flag = false; for (int j = 1; j < k; j++) if (a[j - 1] > a[j]) { temp = a[j]; a[j] = a[j - 1]; a[j - 1] = temp; flag = true; } k--; } } // 排除前面没有排序,后面排好序的情况.记录最后交换的位置,第二次从头遍序到这个位置 static void bubbleSort3(int a[]) { int k, flag = a.length; int temp; while (flag > 0) { k = flag; flag = 0; for (int i = 1; i < k; i++) { if (a[i - 1] > a[i]) { temp = a[i]; a[i] = a[i - 1]; a[i - 1] = temp; flag = i; } } } } public static void main(String[] args) { int arr1[] = {2, 3, 4, 5, 1, 2, 4, 5, 7, 3, 5, 8 , 3, 8, 9, 11, 12, 13,14,15,15,32,34,35,45,56,67,78,89,99 }; int arr2[] = { 2, 3, 4, 5, 1, 2, 4, 5, 7, 3, 5, 8 , 3, 8, 9, 11, 12, 13,14,15,15,32,34,35,45,56,67,78,89,99 }; int arr3[] = { 2, 3, 4, 5, 1, 2, 4, 5, 7, 3, 5, 8 , 3, 8, 9, 11, 12, 13,14,15,15,32,34,35,45,56,67,78,89,99 }; long startTime = new Date().getTime(); long endTime ; bubbleSort1(arr1); for (int i = 0; i < arr1.length; i++) { System.out.print(arr1[i] + " "); } endTime = new Date().getTime(); System.out.println(endTime - startTime); startTime = endTime; bubbleSort2(arr2); for (int i = 0; i < arr2.length; i++) { System.out.print(arr2[i] + " "); } endTime = new Date().getTime(); System.out.println(endTime - startTime); startTime = endTime ; bubbleSort3(arr3); for (int i = 0; i < arr3.length; i++) { System.out.print(arr3[i] + " "); } endTime = new Date().getTime() ; System.out.println(endTime - startTime); } }
结果显示如下:
1 2 2 3 3 3 4 4 5 5 5 7 8 8 9 11 12 13 14 15 15 32 34 35 45 56 67 78 89 99 2
1 2 2 3 3 3 4 4 5 5 5 7 8 8 9 11 12 13 14 15 15 32 34 35 45 56 67 78 89 99 1
1 2 2 3 3 3 4 4 5 5 5 7 8 8 9 11 12 13 14 15 15 32 34 35 45 56 67 78 89 99 0
由于数据的大小关系,结果不是很明显,但是可以很明显看出:所需要的时间是从大到小的。