package com.jiucaiyuan.net.algrithm.sort;
/**
* 冒泡法排序
* 循环待排序数组,如果前面数比后面数大,交换, 循环完一次最后一位是最大数,下次处理0~N-2个数
* 排序结果是升序数组
* 时间复杂度O(N^2) 空间复杂度O(1)
*
* @Author jiucaiyuan 2022/3/25 21:48
* @mail services@jiucaiyuan.net
*/
public class BubbleSort {
public static void bubbleSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
//每次循环时处理到哪个元素截止
for (int i = arr.length - 1; i > 0; i--) {
//从头至i循环,循环完毕i位置是0~i最大的
for (int j = 0; j < i; j++) {
//如果前面的数比后面的大,换位置
if (arr[j] > arr[j + 1]) {
swap(arr, j, j + 1);
}
}
}
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] args) {
int[] arr = {1,2,8,3,5,7,2,7,8,12,4};
bubbleSort(arr);
print(arr);
}
private static void print(int[] arr) {
if(arr == null ){
return;
}
for(int a : arr){
System.out.print(a+"\t");
}
System.out.println();
}
}