基本思想
排序思想
对n个记录的排序码序列进行n-1次扫描。每次扫描时,都从下到上对相邻的两个排序码进行比较,如果不符合由小到大的顺序,就将他们交换位置。
1. 经过第一次扫描,就能从n-1对相邻排序码的比较中,把排序码序列里最大的元素渐渐地移动到序列的“最后”边;
2. 经过第二次扫描,就能从n-2对相邻排序码的比较中,把排序码序列里次大的元素渐渐地排到序列的“次后”位置;
3. 经过最多n-1次扫描,n个排序码都排到了自己的最终位置。
算法实现
冒泡排序算法,Java实现,代码如下所示:
public class BubbleSort{
public static void main(String[] args){
int score[] = {67, 69, 75, 87, 89, 90, 99, 100};
for (int i = 0; i < score.length -1; i++){ //最多做n-1趟排序
for(int j = 0 ;j < score.length - i - 1; j++){ //对当前无序区间score[0......length-i-1]进行排序(j的范围很关键,这个范围是在逐步缩小的)
if(score[j] < score[j + 1]){ //把小的值交换到后面
int temp = score[j];
score[j] = score[j + 1];
score[j + 1] = temp;
}
}
System.out.print("第" + (i + 1) + "次排序结果:");
for(int a = 0; a < score.length; a++){
System.out.print(score[a] + "\t");
}
System.out.println("");
}
System.out.print("最终排序结果:");
for(int a = 0; a < score.length; a++){
System.out.print(score[a] + "\t");
}
}
}
算法分析
时间复杂度
一般情况下,时间复杂度为O(n^2)。正序情况是冒泡排序的最好情况,只比较了n-1次,交换0次,时间复杂度为O(n)。冒泡排序适合问题规模小的场合。
空间复杂度
冒泡排序过程中,需要调整序列,交换待排序记录需要一个临时存储单元,所以空间复杂度为O(1)。
排序稳定性
冒泡排序是稳定的排序方法。