冒泡排序的原理,思路,以及算法分析(Java实现)
冒泡排序
如果遇到相等的值不進行交換,那這種排序方式是穩定的排序方式。
1.原理:比較兩個相鄰的元素,將值大的元素交換到右邊
2.思路:依次比較相鄰的兩個數,將比較小的數放在前面,比較大的數放在后面。
(1)第一次比較:首先比較第一和第二個數,將小數放在前面,將大數放在后面。
(2)比較第2和第3個數,將小數 放在前面,大數放在后面。
…
(3)如此繼續,知道比較到最后的兩個數,將小數放在前面,大數放在后面,重復步驟,直至全部排序完成
(4)在上面一趟比較完成后,最后一個數一定是數組中最大的一個數,所以在比較第二趟的時候,最后一個數是不參加比較的。
(5)在第二趟比較完成后,倒數第二個數也一定是數組中倒數第二大數,所以在第三趟的比較中,最后兩個數是不參與比較的。
(6)依次類推,每一趟比較次數減少依次
3.代碼實現
package myproject; /*** * @author luckly**/ public class bubblesort {public static void main(String[] args) {int []arr=new int[] {10,9,8,6,4,65,77,44,};for(int i=0;i<arr.length-1;i++) {for(int j=0;j<arr.length-i-1;j++) {//此處你可能會疑問的j<n-i-1,因為冒泡是把每輪循環中較大的數飄到后面,// 數組下標又是從0開始的,i下標后面已經排序的個數就得多減1,總結就是i增多少,j的循環位置減多少if(arr[j]>arr[j+1]) {int temp=arr[j+1];arr[j+1]=arr[j];arr[j]=temp;} }}for(int i:arr) {System.out.print(i+",");}} }4.算法分析:
(1)由此可見:N個數字要排序完成,總共進行N-1趟排序,每i趟的排序次數為(N-i)次,所以可以用雙重循環語句,外層控制循環多少趟,內層控制每一趟的循環次數
(2)冒泡排序的優點:每進行一趟排序,就會少比較一次,因為每進行一趟排序都會找出一個較大值。如上例:第一趟比較之后,排在最后的一個數一定是最大的一個數,第二趟排序的時候,只需要比較除了最后一個數以外的其他的數,同樣也能找出一個最大的數排在參與第二趟比較的數后面,第三趟比較的時候,只需要比較除了最后兩個數以外的其他的數,以此類推……也就是說,沒進行一趟比較,每一趟少比較一次,一定程度上減少了算法的量。
(3)時間復雜度
1.如果我們的數據正序,只需要走一趟即可完成排序。所需的比較次數C和記錄移動次數M均達到最小值,即:Cmin=n-1;Mmin=0;所以,冒泡排序最好的時間復雜度為O(n)。
2.如果很不幸我們的數據是反序的,則需要進行n-1趟排序。每趟排序要進行n-i次比較(1≤i≤n-1),且每次比較都必須移動記錄三次來達到交換記錄位置。在這種情況下,比較和移動次數均達到最大值:
情況下,比較和移動次數均達到最大值:
[外鏈圖片轉存中…(img-leLEAgKr-1592312151742)]
總結
以上是生活随笔為你收集整理的冒泡排序的原理,思路,以及算法分析(Java实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java中四种访问修饰符的区别
- 下一篇: 一分钟搞定Java环境变量配置