冒泡排序
1、介绍
**冒泡排序(Bubble Sort,译为:泡沫排序或⽓泡排序)**是⼀种简单的排序算法。
它重复地⾛访过要排序的数列,⼀次⽐较两个元素,如果他们的顺序错误就把他们交换过来。⾛访数列的⼯作是重复地进⾏直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因
为越⼤的元素会经由交换慢慢“浮”到数列的顶端,故名。
2、算法描述
- i 从0开始, i 与 i+1 ⽐较,如果 i>i+1 ,那么就互换
- i 不断增加,直到 i<n-1 (n是数组元素的个数, n-1 是数组已经最后⼀个元素) ,⼀趟下来,
可以让数组元素中最⼤值排在数组的最后⾯
3、代码实现
3.1、初级版
/**
* @author Administrator
* @创建者: 黄乐敏
* @类名: BubbleSort
* @类描述: 冒泡排序算法初级版
* @创建时间: 2021年03月24日 10:18
*/
public class BubbleSort01 {
/**
* @创建人: 黄乐敏
* @方法描述: 排序操作方法
* @创建时间: 2021/3/24 0024 10:31
* @参数: [array]
* @返回值类型: void
*/
public void sort(int[] array){
for (int i = 0; i < array.length - 1; i++) {
for (int j = 0; j < array.length - i - 1; j++) {
int temp;
if (array[j] > array[j+1]){
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
public void show(int[] array){
for (int i = 0; i < array.length ; i++) {
System.out.print(array[i]+"->");
}
}
public static void main(String[] args) {
int[] arr = {4,7,1,0,6,24,9,2};
BubbleSort01 bubbleSort01 = new BubbleSort01();
bubbleSort01.sort(arr);
bubbleSort01.show(arr);
}
}
3.2、优化版
public static void bubbleSort(int[] array){
//记录数组元素是否发生了位置交换
boolean isChange;
//外层循环表示趟数,递增
for (int i = 0; i < array.length-1; i++) {
//在每趟排序时初始化为false
isChange = false;
//内层循环是比较的次数,比较的次数递减
for (int j = 0; j < array.length-i-1; j++) {
if (array[j]>array[j+1]){
swap(array,j,j+1);
//进入到这里说明发生了交换
isChange = true;
}
}
//判断,如果isChange=false,说明没有交换,就跳出本趟排序
//⽐较完这⼀趟后没有发⽣置换,那么说明已经排好序了,不需要再执⾏后面的趟下去了(减少了不必要的趟数)
if (isChange == false){
break;
}
}
}
/**
* 交换元素
*/
public static void swap(int[] arr,int i,int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
4、小结
冒泡排序的时间复杂度为O(n^2)
冒泡排序就是每次通过比较和交换元素位置将最大的数逐渐排列,直到排好序为止。
冒泡排序是稳定排序。
冒泡排序是交换排序