1、原理
在无序区间,通过相邻数的比较,将最大的数冒泡到无序区间的最后(或者将最小的数冒泡到无序区间的最前),持续这个过程,直到数组整体有序
2、实现
(1)手动实现
(2)代码
public class BubbleS {
//升序排序
public static void bubbleSort(int[] array){
//采用从后往前的方式进行交换
//已排序区域[0,bound)
//未排序区域[bound,array.length)
for(int bound = 0;bound<array.length-1;bound++){
for(int cur = array.length - 1;cur > bound;cur--){
if(array[cur-1]>array[cur]){
swap(array,cur-1,cur);
}
}
}
}
public static void bubbleSort2(int[] array){
//采用从前往后的方式进行交换
//已排序区域[bound,array.length)
//未排序区域[0,bound)
for(int bound = 0;bound<array.length-1;bound++){
for(int cur = 0;cur<array.length-bound-1;cur++){
if(array[cur+1]<array[cur]){
swap(array,cur+1,cur);
}
}
}
}
private static void swap(int[] array, int i, int j) {
int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
(3)运行结果
3、性能分析
(1)时间复杂度:
最好:O(n) (数据有序)
平均:O(n^2)
最坏:O(n^2) (数据逆序)
(2)空间复杂度:O(1)
(3)稳定性:稳定