校園招聘馬上就要來臨了,作為過來人,演算法在筆試中必考,因為畢竟是學生,大部分沒有專案經驗,只能問一些基礎的知識!今天帶大家學習演算法中的經典:氣泡排序,也是去年我參加筆試考的最多的演算法之一。
一、演算法描述
氣泡排序:依次比較相鄰的資料,將小資料放在前,大資料放在後;即第一趟先比較第1個和第2個數,大數在後,小數在前,再比較第2個數與第3個數,大數在後,小數在前,以此類推則將最大的數」滾動」到最後乙個位置;第二趟則將次大的數滾動到倒數第二個位置……第n-1(n為無序資料的個數)趟即能完成排序。
我來簡述一下這個概念:就是兩兩資料進行比較,小的放在上面,大的放在下面,如此比較迴圈下去,最後就是小的放在上面大的放在下面。如下圖:
舉個例子:
下面5個資料需要進行排序
40 8 15 18 12 (文中僅細化了第一趟的比較過程)
第1趟: 8 15 18 12 40 (下面一張圖,來展示排序的過程)
第2趟:8 15 12 18 40
第3趟:8 12 15 18 40
第4趟:8 12 15 18 40
上面這個例子說明,我們有5個資料,只需進行4次迴圈就可以完成排序。下面看**如何實現氣泡排序。
二、演算法實現
public
class test ;
for (int i = 0; i < arrs.length - 1; i++)
}system.out.print("第" + (i + 1) + "次排序結果:");
for (int a = 0; a < arrs.length; a++)
system.out.println("");
}system.out.print("最終排序結果:");
for (int a = 0; a < arrs.length; a++) }}
下面我對**進行解釋一下:第乙個迴圈為什麼長度需要 - 1,我們上面的例子你就知道了,我們有5個資料,只需要4次就可以完成排序,所以第乙個for迴圈需要 - 1;
有人可能會有疑問,為什麼第二個for迴圈要 - i - 1;還是需要看上面那個例子,我們第一次迴圈就確定了最後乙個數40,所以以後再排序,這個40我們都不需要在比較了,因為它已經是最大的了,所以我們 - i - 1,是為了把範圍縮小到40前面那個數。
如圖,其中綠色柱子就是我們第一次排序確定下來的那個最大的,以後我們就不會在對它進行比較了,所以我們需要把範圍進行縮小黑色柱子,所以需要 - i ,後面- 1其實和第一次迴圈意思一樣。
最後看一下**輸出結果:
三、總結
經典排序演算法(一) 氣泡排序
氣泡排序是最基礎的一種排序方法,在我們剛接觸程式語言的迴圈時,常常會接觸到這種演算法,利用的是氣泡越冒越大的原理。它的時間複雜度為o n 2 具體原理如下 假設現在有一行待排序的數 1,5,2,6,3 利用氣泡排序演算法時,程式是這樣執行的。1 第一組排序 找出最大的數並放至隊尾 程式會拿出這一行數...
經典演算法 氣泡排序
題目從小到大排序陣列 原理 小的數放左邊,大的數放右邊。for 迴圈 的巢狀迴圈。外層迴圈控制排序的趟數 for int i 0 i arr.length 1 i 趟數為需要排序的字元多少,沒進行一趟,則排出乙個最大值。內層迴圈控制每一趟排序的次數 for int j 0 j arr.length ...
經典排序演算法,氣泡排序
氣泡排序是本人在大一學習c語言的時候就已經學過了,最近這段時間想起來把比較經典的排序演算法拿來回顧一下,鞏固一下知識。氣泡排序的核心就是比較相鄰兩個數的大小,然後將小的 或者大的 放到前面去,經過一趟之後,就能把最小或者最大的放到最前面,第二趟排序的時候,第乙個數不參與排序,從第二個數開始,經過一趟...