之所以叫冒泡排序,是因为排序的过程就像气泡由水底一直往水面升。
假设如下数组(A):
数组 | 3 | 4 | 5 | 2 | 1 |
下标 | 0 | 1 | 2 | 3 | 4 |
第一次排序过程:
1、3<4:不变,结果:A={3,4,5,2,1}。
2、4<5:不变,结果:A={3,4,5,2,1}。
3、5>2:5与2交换位置,结果A[2]=2,A[3]=5,A={3,4,2,5,1}。
4、5>1:5与1交换位置,结果A[3]=1,A[4]=5,A={3,4,2,1,5}。
第一次排序结果:
数组 | 3 | 4 | 2 | 1 | 5 |
下标 | 0 | 1 | 2 | 3 | 4 |
第一次排序进行了4次比较。
第二次排序结果:
数组 | 3 | 2 | 1 | 4 | 5 |
下标 | 0 | 1 | 2 | 3 | 4 |
第二次排序,只需要做3次比较即可。第三次排序结果:
数组 | 2 | 1 | 3 | 4 | 5 |
下标 | 0 | 1 | 2 | 3 | 4 |
第四次排序结果:
数组 | 1 | 2 | 3 | 4 | 5 |
下标 | 0 | 1 | 2 | 3 | 4 |
算法复杂度计算:由(N-1)+(N-2)+…+1=N*(N-1)/2得出O(N*N),其中N为数组数据项。所以冒泡排序的算法复杂度:O(N*N)。
以下为Java实现:
public class BubbleSort {
static int[] array;
//冒泡排序
public static int [] action() {
int temp;
//每一次循环(i)都将一个最大值放到数组最后面,下一个循环(j)将减少一次对比
for (int i = array.length-1; i >1; i--) {
for (int j = 0; j < i; j++) {
int left = array[j];
int right = array[j + 1];
if (right < left) {
temp = right;
array[j+1] = left;
array[j] = temp;
}
}
}
return array;
}
public static void main(String[] args) {
array=new int []{40,5,1,7,10,3,9,12,40};
int [] result=action();
for (int string : result) {
System.out.println(string);
}
}
}