【冒泡排序思想】冒泡排序属于交换类排序算法。基本思想为:首先将第一个记录和第二个记录进行比较,如果第一个记录大,则将两者交换位置,否则不交换;然后将现在的第二个记录和第三个记录比较,如果第二个大,则二者交换,否则不交换……一直按照这种方式进行下去,最终整个数列中的最大值将被交换到数列的最后,一趟冒泡排序结束。根据这个思想我们可以看出,一旦一趟冒泡排序结束,那么就一定能把参与这趟排序的数列中的最大值找出并排在正确的位置上。
【冒泡排序Java代码实现】
public class BubbleSort {
public void bubble_sort(int[] array){
for (int i = array.length-1; i >= 1; --i) { //循环从最后开始,每一趟冒泡排序都能找到当前排序的最大值,并把最大值交换到正确的位置上
int flag = 0; //交换标志位,默认为0,代表这一趟冒泡排序中没有发生过交换
for (int j = 1; j<= i; ++j) { //在一趟冒泡排序中两两比较
if (array[j-1] > array[j]) { //如果前边的元素大于后边的元素,则将两个元素交换位置
int temp = array[j];
array[j] = array[j-1];
array[j-1] = temp;
flag = 1; //交换后,将交换标志位置1,表示该趟冒泡排序中发生过交换
}
}
if(flag == 0) //如果一趟冒泡排序中没有发生过任何交换,则代表当前数列已经有序,直接退出排序
break;
}
for (int k = 0; k < array.length; k++) { //排序结束后,输出有序数列
System.out.print(array[k]+" ");
}
}
}
【冒泡排序测试代码】
public class SortTest {
public static void main(String[] args) {
int[] array = {0,49,38,65,97,76,13,27,49};
System.out.println("冒泡排序结果为:");
BubbleSort bubbleSort = new BubbleSort();
bubbleSort.bubble_sort(array);
}
}
【冒泡排序测试结果】
【冒泡排序复杂度分析】① 在最坏情况下,即数列逆序,则时间复杂度为O(n^2)。② 在最好情况下,即数列已经有序,则时间复杂度为O(n)。③ 在平均情况下,冒泡排序的时间复杂度为O(n^2)。④ 由于冒泡排序只用了一个临时变量temp来辅助交换,因此空间复杂度为O(1)。