基本思想
冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。
以从大到小为例。
每次都是比较相邻的两个数,如果后面的数比前面的数大,则交换这两个数的位置。一直比较下去直到最后两个数比较完毕后,最小的数就在最后一个了。就如同是一个气泡,一步一步往后“翻滚” ,直到最后一位。所以这个排序的方法有一个很好听的名字“冒泡排序” 。
每将一个数归位我们将其称为“一趟” 。每一趟,都是将小的归位(先是最小,后次小,次后第三小…)。
如果有 n 个数进行排序,只需将 n-1 个数归位,也就是说要进行n-1 趟操作。而“每一趟”都需要从第 1 位开始进行相邻两个数的比较,将较小的一个数放在后面,比较完毕后向后挪一位继续比较下面两个相邻数的大小,重复此步骤,直到最后一个尚未归位的数, 已经归位的数则无需再进行比较 (已经归位的数你还比较个啥, 浪费表情) 。
核心思想
冒泡排序的核心部分是双重嵌套循环。
时间复杂度:O(N^2)
Java实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| public static void main(String[] args) { int length = 10; int maxValue = 20; int[] array = new int[length]; Random r = new Random(); for (int i = 0; i < array.length; i++) { array[i] = r.nextInt(maxValue); } System.out.println("before"); print(array); bubbleSort(array); System.out.println("after"); print(array); } public static void bubbleSort(int[] array) { int tmp = 0; for (int i = 0; i < array.length; i++) { for (int j = 0; j < array.length-1; j++) { if (array[j] < array[j+1]) { tmp = array[j]; array[j] = array[j+1]; array[j+1] = tmp; } } } } public static void print(int[] array) { System.out.println(Arrays.toString(array)); }
|
总结
冒泡比较耗时