氣泡排序的主要思想就是:每次比較兩個相鄰的元素,如果它們比較大小之後,左右的順序錯誤,就相互交換位置。
下面以從大到小排序為例,來講一下它的思路:
第一輪首先處理第1個數和第2個數,使這兩個數從大到小排列,然後在前次處理後的基礎上處理第2個數和第3個數使其從大到小排列,以此類推,直到處理完第n-1個和第n個數,這樣第一輪處理結束。
乙個迴圈結束之後,得到的序列中的最後乙個數,也就是第n個數必定是最小的數。
重複上面的步驟,進行第二輪的兩兩比較。一輪結束後,得到的第(n-1)個數就是列表中的第二小。
以此類推重複上面的步驟,直到第(n-1)輪之後,所有的數都排序好了。
下面舉個簡單的比較例子:
12,35,99,18,76
第一輪:
這一輪從左往右依次兩兩比較,進行四輪
35,12,99,18,76
35,99,12,18,76
35,99,18,12,76
35,99,18,76,12
這時候,12肯定就是最小的乙個數,因為它比其它比較過的數字都小
第二輪:
這一輪,只需要比較12之前的四個數字,進行三輪兩兩比較
99,35,18,76,12
99,35,18,76,12
99,35,76,18,12
第三輪:
這一輪只需要比較18,12之前的三個數字,進行兩輪兩兩比較
99,35,76,18,12
99,76,35,18,12
第四輪:
這一輪只需要比較35,18,12之前的兩個數字的大小即可。
99,76,35,18,12
這時候,所有的比較就進行完了,最終結果就是上面這個。
我們可以看到,假設有n個數字作比較,那麼大的迴圈輪數為(n-1)次,
而每一輪,進行兩兩比較的次數為 (n-已經排好序的i)次。
因此說,氣泡排序的核心演算法就是 巢狀迴圈
**如下:
public
class bubblesort ;
sort(a);
for (int i = 0; i < a.length; i++)
}public
static
void
sort(int a) }}
}}
鄰居好說話 氣泡排序
簡化版的桶排序不僅僅有上一節所遺留的問題,更要命的是 它非常浪費空間!例如需要排序數的範圍是0 2100000000之間,那你則需要申請2100000001個變數,也就是說要寫成int a 2100000001 因為我們需要用2100000001個 桶 來儲存0 2100000000之間每乙個數出現...
鄰居好說話 氣泡排序
氣泡排序的基本思想是 每次比較兩個相鄰的元素,如果它們的順序錯誤就把它們交換過來。如下 include intmain for i 1 i n i 輸出結果 printf d a i return0 現在分別有5個人的名字 和分數 huhu 5分 haha 3分 xixi 5分 hengheng 2...
鄰居好說話 氣泡排序
簡化版的桶排序不僅僅有上一節所遺留的問題,更要命的是 它非常浪費空間!例如需要排序數的範圍是0 2100000000之間,那你則需要申請 2100000001個變數,也就是說要寫成int a 2100000001 因為我們需要用2100000001個 桶 來儲存0 2100000000之間每乙個數出...