冒泡排序属于简单排序的一种,也是面试问的比较多的一种排序算法,下面给大家介绍一下冒泡算法用api实现
思路
依次比较相邻的元素,数值较大的放在右边,保证每一轮比较都能都能将最大的元素找出并放在参与比较元素的最右侧
动图
api
/**
* 冒泡排序算法api
*
* @date 2021/12/28
*/
public class BubbleSort {
/**
* 排序
*
* @param a 排序对象,该数据元素对象必须实现Comparable接口
*/
public Comparable[] sort(Comparable[] a) {
for (int i = 1; i < a.length - 1; i++) {
for (int j = 1; j < a.length - 1; j++) {
if (greater(a[j], a[j + 1])) {
swap(a, j, j + 1);
}
}
}
return a;
}
/**
* 判断a元素是否比b大
*
* @param a 元素a
* @param b 元素b
* @return a>b return true,否则return false
*/
public boolean greater(Comparable a, Comparable b) {
return a.compareTo(b) > 0;
}
/**
* 交换数组元素a[i]和a[j]的值
*
* @param a 集合元素
* @param i 下标索引i
* @param j 下标索引j
*/
public void swap(Comparable[] a, int i, int j) {
Comparable temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
/**
* 测试
*
* @param args
*/
public static void main(String[] args) {
BubbleSort bubbleSort = new BubbleSort();
Integer[] a = {1, 3, 5, 7, 14, 2, 4, 21};
Comparable[] sort = bubbleSort.sort(a);
System.out.println(Arrays.toString(sort));
}
}
时间复杂度
按最坏情况来算,即每次比较都要交换元素,时间复杂度为O(N^2)
适用
使用于排序元素比较少的集合,元素较多,时间复杂度指数增长并不适用
总结
代码复制过去即可使用,大家可自行实验