天天看點

Java面試_冒泡排序

冒泡排序:

Java中有一些基礎的排序算法,這種一般常見于面試題中。

冒泡排序:就是将一個長度為n的數組做n-1次排序(循環)。

總結為依據話就是兩兩比較,大的資料交換位置。

①第一次循環

将第一個元素與第二個相比,如果比第二個小,那麼資料就不變;

如果比第二個大,那麼就交換兩者的位置。

第二個和第三個比,如果第二個比第三個大,者交換位置,否則不變。

以此類推,直到和最後一個相比較完為止。

這樣最後一個數就是最大值。

②第二次就從第一個開始,比較到n-1個為止。

這樣漸漸的最大的數都依次排列到了最後,第一個數是最小的。就像冒泡一樣,最上面是最大的泡,是以稱為冒泡排序。

下面是實作冒泡排序的代碼,相當于是兩層for循環。

<code>package</code> <code>****</code>

<code>import</code> <code>org.junit.Test;</code>

<code>/**</code>

<code> </code><code>* @author jon</code>

<code> </code><code>*</code>

<code> </code><code>*自己寫一個冒泡排序</code>

<code> </code><code>*/</code>

<code>public</code> <code>class</code> <code>BubbleSort {</code>

<code>    </code><code>@Test</code>

<code>    </code><code>public</code> <code>void</code> <code>testBubbleSort() {</code>

<code>        </code><code>//定義一個int數組</code>

<code>        </code><code>int</code><code>[] a = {</code><code>12</code><code>,</code><code>23</code><code>,</code><code>10</code><code>,</code><code>33</code><code>,</code><code>45</code><code>,</code><code>20</code><code>};</code>

<code>        </code><code>//依次擷取元素,然後和元素後面的每一個比較,如果比後面的小就放到後面,</code>

<code>        </code><code>//如果比後面的大則不變,那麼最後一個就是最小的了</code>

<code>        </code><code>for</code> <code>(</code><code>int</code> <code>i = </code><code>0</code><code>; i &lt; a.length-</code><code>1</code><code>; i++) {</code><code>//第一次比較</code>

<code>            </code><code>System.out.println(</code><code>"第"</code><code>+(i+</code><code>1</code><code>)+</code><code>"次排序結果為:"</code><code>);</code>

<code>            </code><code>for</code> <code>(</code><code>int</code> <code>j = </code><code>0</code><code>; j &lt; a.length-</code><code>1</code><code>-i; j++) { </code><code>//每次比較的都是剩下的了</code>

<code>                </code><code>if</code> <code>(a[j] &gt; a[j+</code><code>1</code><code>]) {</code>

<code>                    </code><code>int</code> <code>temp = a[j];</code>

<code>                        </code><code>a[j] = a[j+</code><code>1</code><code>];</code>

<code>                        </code><code>a[j+</code><code>1</code><code>] = temp;</code>

<code>                </code><code>}</code>

<code>                </code><code>System.out.print(</code><code>"_"</code><code>+a[j]);</code><code>//列印正在排序的</code>

<code>            </code><code>}</code>

<code>            </code><code>//列印已經排序好的</code>

<code>            </code><code>for</code> <code>(</code><code>int</code> <code>m = a.length-</code><code>1</code><code>-i; m &lt; a.length; m++) {</code>

<code>                </code><code>System.out.print(</code><code>"_"</code><code>+a[m]);</code>

<code>            </code><code>System.out.println();</code>

<code>        </code><code>}</code>

<code>        </code><code>//周遊a數組</code>

<code>        </code><code>System.out.println(</code><code>"最終結果為:"</code><code>);</code>

<code>        </code><code>for</code> <code>(</code><code>int</code> <code>i = </code><code>0</code><code>; i &lt; a.length; i++) {</code>

<code>            </code><code>System.out.print(a[i]+</code><code>"  "</code><code>);</code>

<code>    </code><code>}</code>

<code>}</code>

<code>/*  輸出的結果為:</code>

<code>         </code><code>第1次排序結果為:</code>

<code>        </code><code>_12_10_23_33_20_45</code>

<code>        </code><code>第2次排序結果為:</code>

<code>        </code><code>_10_12_23_20_33_45</code>

<code>        </code><code>第3次排序結果為:</code>

<code>        </code><code>_10_12_20_23_33_45</code>

<code>        </code><code>第4次排序結果為:</code>

<code>        </code><code>第5次排序結果為:</code>

<code>        </code><code>最終結果為:</code>

<code>        </code><code>10  12  20  23  33  45</code>

<code></code>

      本文轉自建波李 51CTO部落格,原文連結:http://blog.51cto.com/jianboli/1867258,如需轉載請自行聯系原作者