import java.util.Scanner;
import org.junit.Test;
public class Main4 {
/**
* 简单冒泡排序
* @param a 待排序数组
*/
public static void bubbleSort(int[] a) {
int n=a.length;//数组长度
for (int i = 1; i < n; i++) {//排序n-1趟
for (int j = n-1; j >=i; j--) {//从后往前冒泡,每趟冒泡都将最小的冒到最前面
if(a[j-1]>a[j]){
int temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
}
}
}
}
/**
* 优化冒泡排序(当某一趟排序没有发生交换,则说明序列已经有序,没有必要再比较下去,可以直接结束排序)
* @param a 待排序数组
*/
public static void bubbleSort1(int[] a) {
int n=a.length;//数组长度
for (int i = 1; i < n; i++) {//最多排序n-1趟
boolean exchange=false;//一趟排序是否发生交换的标志
for (int j = n-1; j >=i; j--) {//从后往前冒泡,每趟冒泡都将最小的冒到最前面
if(a[j-1]>a[j]){
int temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
exchange=true;
}
}
if(exchange==false){
return;
}
}
}
@Test
public void testBubbleSort() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入数组长度!");
int n = sc.nextInt();
int[] a = new int[n];
System.out.println("请输入数组元素");
for (int i = 0; i < a.length; i++) {
a[i] = sc.nextInt();
}
// bubbleSort(a);
bubbleSort1(a);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
}
}
冒泡排序算法的时间复杂度为O(n^2)