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)