原理
冒泡排序是一种常用的排序方法,以升序排序为例,其原理是依次比较相邻两个数,如果第1个数比第2个数大,则交换位置,然后再比较第2个数和第3个数,直到比较完最后一个数,这样一轮排序下来,最大的一个数将会确定,并会被放到最后一个位置。如果共有N个数,则经过N轮排序下来,整个排序就会完成,其过程就像气泡上升,因此叫做冒泡排序。
示例
如下一个原始序列:7, 6, 4, 3, 8, 9, 5, 1
第1轮排序:
(1)比较7和6,7大于6,则交换,即6,7,4,3,8,9,5,1
(2)比较7和4,7大于4,则交换,即6,4,7,3,8,9,5,1
(3)比较7和3,7大于3,则交换,即6,4,3,7,8,9,5,1
(4)比较7和8,7小于8,不交换,即6,4,3,7,8,9,5,1
(5)比较8和9,8小于9,不交换,即6,4,3,7,8,9,5,1
(6)比较9和5,9大于5,则交换,即6,4,3,7,8,5,9,1
(7)比较9和1,9大于1,则交换,即6,4,3,7,8,5,1,9
这样第一轮下来,最大数9被确定出来,排到最后位置,像一个最大的气泡浮到水面。接下来需要第2轮、第3轮排序……,原理同上。
Java的简单实现
package me.geed.algorithms;
public class BubbleSort {
public static void sort(int[] array) {
int len = array.length;
for (int i = 0; i < len; i++) {
for (int j = 0; j < len-i-1; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j+1] = temp;
}
}
System.out.print("第" + (i + 1) + "轮排序后:");
for (int value : array) {
System.out.print(value + " ");
}
System.out.println();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array = {7, 6, 4, 3, 8, 9, 5, 1};
BubbleSort.sort(array);
System.out.print("最终结果:");
for (int value : array) {
System.out.print(value + " ");
}
}
}
输出结果:
第1轮排序后:6 4 3 7 8 5 1 9
第2轮排序后:4 3 6 7 5 1 8 9
第3轮排序后:3 4 6 5 1 7 8 9
第4轮排序后:3 4 5 1 6 7 8 9
第5轮排序后:3 4 1 5 6 7 8 9
第6轮排序后:3 1 4 5 6 7 8 9
第7轮排序后:1 3 4 5 6 7 8 9
第8轮排序后:1 3 4 5 6 7 8 9
最终结果:1 3 4 5 6 7 8 9
时间复杂度
冒泡排序的时间复杂度为O(N*N)