一、引言
算法知识是计算机和软件工程的基础,虽然日常开发中很少会让我们自己写算法,但是对于不是科班出身的我来说,技术就是我的精神食粮,所以这一分类开始记录学习算法的过程~~~
二、冒泡算法
冒泡工具类
/** * 冒泡排序算法工具类 */ public class MaoPaoUtil { /** * 冒泡排序【对外暴露静态方法】 */ public static void bubbleSort(int[] arr) { System.out.println("========排序前的数组,元素为:" + showItem(arr) + "========"); //1、对数据循环,取出数据比较 for (int i = 0; i < arr.length - 1; i++) { //2、设定排序完成标记,若为true,则表示此次循环没有进行交换,即待排序数组已经有序,排序完成。 boolean flag = true; //3、再次对数据循环,取出数据比较 for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { //4、从新定义一个变量temp,作为交换变量用 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; flag = false; } } //5、若排序完成,结束循环 if (flag) { break; } else { System.out.println("第【" + (i + 1) + "】次排序后的数组,元素为:" + showItem(arr) + "========"); } } } /** * 返回数组字符串 */ public static String showItem(int[] arr) { String itemStr = ""; if (null != arr) { itemStr = "【 "; for (int item : arr) { itemStr = itemStr + " " + item; } itemStr += " 】"; } return itemStr; } }
测试类
/** * 冒泡工具测试类 */ public class MaoPaoTest { public static void main(String[] args) { //1、设置乱序数组 int[] arr = {1, 8, 3, 6, 9, 4, 5}; //2、调用冒泡排序工具类 MaoPaoUtil.bubbleSort(arr); } }
解析
基本思想:相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序。
时间复杂度:O(n²)
图解: