冒泡排序:
1)冒泡排序介绍:
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行,直到没有再需要交换的数,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
2) 冒泡排序 思路:
比较两个相邻的下标对应的元素,如果符合条件就交换位置(最值出现在最后位) ;
每一轮比较,需要比较的数列都会减少/变化,因为每一轮冒泡上浮出来的数已经不需要比了。
3)冒泡排序的平均时间复杂度是O(n²)。
代码:
package maopaopaixu;
/**
* @author:张永辉;
* @date: 2020/3/16; 8:41
* todo: 冒泡排序:
* 1. 每一层内循环,上浮出来一个当前数组中最小的元素;
* 2. 多轮内循环结束后,排序结束;
*/
public class MaoPao2 {
public static void main(String[] args) {
// 一,定义数组:
int[] arr = {23,54,65,3,5,2,87,33,345,435,11,325,555,121,346,0,20,49,17};
// 二,定义一个临时变量,用来后边交换元素顺序,作中间值;
int temp = 0;
// 三,开始排序:
// 1)外循环:用来控制内循环的轮数
for (int i = 0; i < arr.length; i++) {
// 2)内循环:用来每次上浮出来一个当前数组中最小的数:
// arr.length-i,是因为每一轮内循环比较之后,已经上浮出来的数已经不需要再参与比较了,所以参与排序的数组长度应为:原数组长度-比较过的内循环轮数;
// arr.length-i-1,因为下边有个arr[j+1],所以-1是为了防止数组越界;
for (int j = 0; j < arr.length-i-1; j++) {
// 2.1)交换元素顺序:
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int i : arr) {
System.out.print(i+"----");
}
}
}