算法原理:
- 比较相邻元素,前者比后者大(小),则交换位置;
- 对每个相邻元素重复第一步,每轮过后,排序最后的元素是该轮排序的最大(小)值;
- 对所有的元素重复第一和第二步骤,排好序的元素不进行比较;
- 每次对越来越少的元素重复上述步骤,直至排序结束。
算法分析
时间复杂度
假设待排序序列中有n个元素,则第一轮比较为(n-1)次,第二轮比较次数为(n-2),以此类推,总的比较次数为:
(n-1)+(n-2)+(n-3)+ ··· + 2
根据大O表示法,该排序算法的时间复杂度为:O(n^2)
算法稳定性
冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,是不会再交换的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。【来自百度百科】
算法实现
public class BubbleTest {
private static final int[] array = {5, 13, 6, 1, 2, 9, 11, 60, 99, 3, 7};
public static void main(String[] args) {
print(array);
Bubble(array);
System.out.println();
print(array);
}
public static int[] print(int[] array) {
for (int i : array) {
System.out.print(i + " ");
}
return array;
}
public static void Bubble(int[] array) {
for (int i = 0; i < array.length - 1; i++) {
for (int j = i + 1; j < array.length; j++) {
if (array[i] > array[j]) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}
}
评论区