时间复杂度:最好O(n),最坏O(n²),平均O(n²)
空间复杂度:O(n)
稳定性:稳定
import java.util.Scanner;
/**
* JAVA冒泡排序
*
* @author KE
*
*/
public class bubbleSort {
//定义整型数组
private static int[] arr ;
//数组长度
private static int num ;
//数组长度
private static int swap ;
//临时变量,用于交换数值
private static int temp = 0;
//构造函数
public bubbleSort () {
//输入方法
this.inPut();
//排序并输出
this.order(arr);
}
//输入方法
public void inPut() {
//输出提示
System.out.println("请输入排序个数");
//从键盘接收数据
Scanner scanner = new Scanner(System.in);
//输入要排序的个数
num = scanner.nextInt();
System.out.println("请输入"+num+"个元素");
//定义整型数组长度为NUM
arr = new int[num];
//循环输入数据
for (int i = 0; i < arr.length; i++) {
arr[i] = scanner.nextInt();
}
}
//冒泡排序 时间复杂度为O(n*n)
public void order(int[] r) {
//遍历数组
for (int i = 0; i < r.length ; i++) {
swap = 0;
for (int j = 1; j < r.length - i; j++) {
//如果前一个值大于后一个值,那么交换值
if( arr[j-1] > arr[j] ){
temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] =temp;
}
swap = 1;
//输出排序过程
for (int k = 0; k < arr.length; k++) {
System.out.print(arr[k] + " ");
}
System.out.println("");
}
//冒牌排序最多进行 n-1 趟,在某趟的两两比较过程中,如果一次交换都未发生,表明已经有序,则排序提前结束
if (swap == 0)
break;
}
}
public static void main(String[] args) {
new bubbleSort();
}
}