前言
作为一个大学学过数据结构的学渣来说,整个四年除了直到一个冒泡排序(当然了也不理解,只是为了应付面试而背的代码),其它排序算法都不懂,于是乎在自己应对面试的时候随便一个算法题自己就懵逼了,表情如下:
更惨的是自己去学习刷力扣题的时候除了会用for循环,什么都不知道了。
于是痛定思痛,开始自己排序算法的学习,毕竟只要肯学就不算晚。
好了言归正传,今天开始学习的是冒泡排序,自己虽然会写冒泡排序的逻辑代码,但是没有研究过为什么他要那么执行啊,所以呢自己就要知其所以然。
自己的理解如下:
import java.util.Arrays;
/**
* @author Administrator
* 冒泡排序中,对数组中的元素进行循环,将每次循环的值与该值后面的值进行比较,若大于则进行交换
* 每次循环都可以将最大的值依次排序到后面
* 这样最小的值就排列到前面
* 从而完成排序的逻辑
*
*
* 给出一个2 5 4 3 1 的数组
* 第一次排序:2和5比较,2小于5,不交换位置 2 5 4 3 1
* 5和4比较,5大于4,交换位置 2 4 5 3 1
* 5和3比较,5大于3,交换位置 2 4 3 5 1
* 5和1比较,5大于1,交换位置 2 4 3 1 5
* 第二次排序:2和4比较,2小于4,不交换位置 2 4 3 1 5
* 4和3比较,4大于3,交换位置 2 3 4 1 5
* 4和1比较,4大于1,交换位置 2 3 1 4 5
* 第三次排序:2和3比较,2小于3,不交换位置 2 3 1 4 5
* 3和1比较,3大于1,交换位置 2 1 3 4 5
* 第四次排序:2和1交换位置,2大于1,交换位置1 2 3 4 5
*
*
*/
public class bubbleSort {
public static void bubbleSort(int[] array){
//第一次循环 循环出数组中的元素
for (int i = 0; i < array.length; i++) {
//第二次循环 控制元素需要循环的次数,第一次冒泡时会将最大的值排序到最后面
//第二次循环时,会将第二大的值排序到倒数第二个数中
//依次类推,每次进行循环时不需要再对后面已经排好序的值进行排序了
//所以长度进行一个-i-1的操作
for (int j = 0; j < array.length -i -1; j++) {
//交换元素
if (array[j]>array[j+1]){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
public static void main(String[] args) {
int[] arr = new int[5];
arr[0]=2;
arr[1]=5;
arr[2]=4;
arr[3]=3;
arr[4]=1;
System.out.println(Arrays.toString(arr));
bubbleSort(arr);
System.out.println(Arrays.toString(arr));
}
}