一. 概念
把相邻的两个元素进行比较,当一个元素大于右侧相邻元素时,交换他们的位置;否则,位置不变。
二. 举例
- 常规的冒泡排序——时间复杂度为O(n^2)
-
原始数列
-
进行第一趟排序
-
第一趟排序后的结果
-
进行第二趟排序
-
第二趟排序后的结果
-
第三到七趟的排序结果
-
- 冒泡排序改进
改进1:在第六轮排序后,整个数列已经有序,无需进行第七轮排序 ;
改进2:右边的很多元素已经排序过,已经是有序的,无需每次都比较。
三. Java实现
-
代码
import java.util.Arrays; public class MySort { public static void sort (int[] array) { //最后一次交换的位置 int lastExchangeIndex = 0; //无序数列的边界,每次比较到此为止 int sortBorder = array.length - 1; for (int i = 0; i < array.length - 1; i++) { //有序标记,每一轮的初始值都是true boolean isSorted = true; for (int j = 0; j < sortBorder; j++) { int temp = 0; if (array[j] > array[j+1]) { temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; //有元素交换,故不是有序数列,标记为false isSorted = false; //更新为最后一次交换元素的位置 lastExchangeIndex = j; } } sortBorder = lastExchangeIndex; if (isSorted) { break; } } } public static void main(String[] args) { int[] array = new int[] {5,8,6,3,9,2,1,7}; sort(array); System.out.println(Arrays.toString(array)); } }
-
运行结果:
[1, 2, 3, 5, 6, 7, 8, 9]
来源:CSDN
作者:Keyloved
链接:https://blog.csdn.net/qq_44837912/article/details/104192776