試題 基礎練習 楊輝三角形
阿新 • • 發佈:2021-01-17
技術標籤:資料結構Java
氣泡排序
1、氣泡排序基本演算法實現
a、主要思想
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-u9iXBfXW-1611149444912)(C:\Users\29455\AppData\Roaming\Typora\typora-user-images\1611147477647.png)]
b、程式碼實現
public static void main(String[] args) {
int[] a = {1,5,9,8,7,4};
for (int i = 0; i < a.length - 1; i++) {
for(int j = 0; j < a.length - i - 1; j++){
//從小到大排序
if(a[j] > a[j + 1]){
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}
執行結果:
1 4 5 7 8 9
2、氣泡排序API
a、氣泡排序API設計
類名 | Bubble |
---|---|
構造方法 | Bubble():建立Bubble物件 |
成員方法 | 1、public static void sort(Comparable[] a) 對陣列內元素進行排序 |
2、private static boolean greater(Comparable a, Comparable b)判斷元素大小 | |
3、private static void exch(Comparable a, int i, int j)對陣列內元素進行交換 |
b、氣泡排序API程式碼實現
public class Bubble {
//進行排序處理
public static void sort(Comparable[] a){
for(int i = 0; i < a.length - 1; i++){
for(int j = 0; j < a.length - 1 - i; j++){
if(greater(a[j], a[j + 1])){
exch(a, j, j + 1);
}
}
}
}
//判斷兩個數的大小
private static boolean greater(Comparable a,Comparable b){
return a.compareTo(b) > 0;
}
//交換陣列索引值
private static void exch(Comparable[] a, int i, int j){
Comparable temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
Test測試
import java.util.Arrays;
public class BubbleTest {
public static void main(String[] args) {
Integer[] a = {6,5,4,3,2,1};
Bubble.sort(a);
System.out.println(Arrays.toString(a));
Double[] b = {9.9,6.6,5.5,3.3,1.1,0.9};
Bubble.sort(b);
System.out.println(Arrays.toString(b));
}
}
執行結果:
[1, 2, 3, 4, 5, 6]
[0.9, 1.1, 3.3, 5.5, 6.6, 9.9]
3、氣泡排序時間複雜度分析
氣泡排序使用了雙層for迴圈,其中內層迴圈的迴圈體是真正完成排序的程式碼,所以在分析複雜度時,主要分析內層迴圈
在最壞情況下,也就是說待排序的陣列和排序演算法為逆序時,那麼
元素的比較次數:
(n - 1) + (n - 2) + (n - 3) + …+ 2 + 1 = n^2 / 2 - n / 2
元素的交換次數:
(n - 1) + (n - 2) + (n - 3) + …+ 2 + 1 = n^2 / 2 - n / 2
總的執行次數為
n^2 - n
/ 2
元素的交換次數:
(n - 1) + (n - 2) + (n - 3) + …+ 2 + 1 = n^2 / 2 - n / 2
總的執行次數為
n^2 - n
按照大O記法推導,保留函式中的最高階項那麼最終氣泡排序的時間複雜度為O(n^2)