冒泡排序思想
一样可能需要一副扑克牌。
- 场景0:现有数组([2,5,3,1,4]),求这个数组的从小到大排序后数组表现。
- 解答方式:类似插入排序,只不过相对来说冒泡的表现更差但也更容易理解。同样分为两个数组,左边的数组为原数组([2,5,3,1,4]),右边的数组为([]),也就是空数组,但也可以认为右边的数组始终有序。此时2与5开始比较。5 > 2,然后5依次分别与3,1,4进行比较。最终确定出来的结果是5是最大的,然后放置右边的数组。此时两个数组分别为([2,3,1,4][5])。接着2与3比较,3与1,3与4比较。得到结果为([2,1,3][4,5])。依次进行比较,直到确定第n个位置的元素是此时前n个元素中数值最大的。
冒泡排序的思想关键就是依次确定第n个元素是前n个元素最大的,第n-1个元素是前n-1个元素中最大。冒泡排序的过程会改变元素的位置。
冒泡Demo
package Sort;
import java.util.Arrays;
import static Sort.InsertSort.arr;
/**
* 实现冒泡排序
*
* @author :Ldity
* @date: 2020/8/10
*/
public class BubbleSort {
/**
* 比较数组中两个元素的大小,如果前一个元素大于后一个元素,那么交换位置
*
* @param arr 目的数组
* @param first 前一个数组数
* @param last 后一个数组数
*/
public static void exchange(int[] arr, int first, int last){
if(arr[first] > arr[last]){
int tmp = arr[first];
arr[first] = arr[last];
arr[last] = tmp;
}
}
/**
* 冒泡排序的实现
*
* @param arr 未排序的数组
*/
public static void bubbleSort(int[] arr){
int n = arr.length;
// 遍历N个元素
for(int i = 0; i < n; i++){
// 从前往后比较,以及此时该位置元素的最大值
for(int j = 0; j < n - i - 1; j++){
exchange(arr,j,j+1);
}
}
}
public static void main(String[] args){
int[] nums = {1,5,2,4,3};
bubbleSort(nums);
System.out.println(Arrays.toString(nums));
}
}