本文图片来在极客时间-王争老师的《数据结构与算法之美》
冒泡排序(BubbleSort)
算法说明
每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次,就完成了 n 个数据的排序工作。
例如:要对一组数据 4,5,6,3,2,1,从小到大进行排序。第一次冒泡操作的详细过程如下:
步骤说明
假设要对N个元素进行冒泡排序,执行的步骤如下:
- 比较相邻的元素。如果前者>后者,则交换两者的位置。
- 按顺序对每一组相邻元素做步骤1的工作,直到结束(需要执行了N-1次比较工作)。
- 以此类推,执行N-1次的步骤2,即可完成冒泡排序。
JAVA代码
package cn.hgy.data.algorithm;
package cn.hgy.data.algorithm;
/**
* 冒泡排序
* <pre>
* 算法介绍:遍历待排序的数,每次选出最大的数添加到合适的位置
* 时间复杂度:最优-O(n),最坏-O(n^2),
* </pre>
*
* @author guoyu.huang
* @version 1.0.0
*/
public class BubbleSort {
public static void main(String[] args) {
int[] arrays = {
4, 5, 6, 3, 2, 1};
int[] sortArrays = sort(arrays);
for (int i = 0; i < sortArrays.length; i++) {
System.out.print(sortArrays[i] + " ");
}
}
/**
* 排序
* <pre>
* 两个优化点:
* 1. 如果进行一轮的比较遍历后,没有发生过替换操作,则表示当前已是有序状态
* 2. 每进行一轮比较遍历后,在进行第i轮之后,数组尾部的n-i到n的数是有序的,无需再判断
* </pre>
*
* @param content
*/
public static int[] sort(int[] content) {
for