冒泡排序(Java)
Posted ConstXiong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序(Java)相关的知识,希望对你有一定的参考价值。
冒泡排序是一种简单的排序算法。
步骤:
遍历比较相邻的两个元素,被比较的左边元素大于右边元素,则交换位置。第一轮遍历、比较、交换完,最后一个是最大的元素
若本次遍历中没有数据交换,代表排序结束,提前退出
有数据交换则再从第一个元素开始遍历、比较、交换,排除最后一个元素
重复 1、2、3 步骤,每次排除上次被遍历的最后一个元素,直到排序完成
代码:
package constxiong.interview;
/**
* 冒泡排序
* @author ConstXiong
*/
public class BubbleSort {
public static void main(String[] args) {
int [] array = {33, 22, 1, 4, 25, 88, 71, 4};
bubbleSort(array);
}
/**
* 冒泡排序
* @param array
*/
public static void bubbleSort(int[] array) {
print(array);
for (int i = 0; i < array.length; i++) {
//提前退出冒泡循环的标志
boolean hasSwitch = false;
//因为使用 j 和 j+1 的下标进行比较,所以 j 的最大值为数组长度 - 2
for (int j = 0; j < array.length - (i+1); j++) {
if (array[j] > array[j + 1]) {
int temp = array[j + 1];
array[j+1] = array[j];
array[j] = temp;
hasSwitch = true;//有数据交换
print(array);
}
}
//没有数据交换退出循环
if (!hasSwitch) {
break;
}
}
}
/**
* 打印数组
* @param array
*/
private static void print(int[] array) {
for(int i : array) {
System.out.print(i + " ");
}
System.out.println();
}
}
打印结果:
33 22 1 4 25 88 71 4
22 33 1 4 25 88 71 4
22 1 33 4 25 88 71 4
22 1 4 33 25 88 71 4
22 1 4 25 33 88 71 4
22 1 4 25 33 71 88 4
22 1 4 25 33 71 4 88
1 22 4 25 33 71 4 88
1 4 22 25 33 71 4 88
1 4 22 25 33 4 71 88
1 4 22 25 4 33 71 88
1 4 22 4 25 33 71 88
1 4 4 22 25 33 71 88
特征:
每一轮遍历中的数,最大的会被移动到最右边
最好情况时间复杂度:O(n) 。即数组本身有序,如 1,2,3,4,5
最坏情况时间复杂度:O(n2) 。即数组本身完全逆序,如 5,4,3,2,1
平均情况下的时间复杂度是 O(n2)。最好情况下进行 0 次交换,最坏情况下进行 n*(n-1)/2 次交换,平均就是 n*(n-1)/2 次交换,比较操作肯定多于交换操作,上限 O(n2),不严格地推断,平均情况下的时间复杂度就是 O(n2)
空间复杂度 O(1)。除了数组内存,只额外申请了一个 temp 变量。是一个原地排序算法。
是稳定的排序算法。即代码示例中,第一个 4 和第二个 4,一定未发生位置变换。
开刷算法面试题...
以上是关于冒泡排序(Java)的主要内容,如果未能解决你的问题,请参考以下文章