決勝經典算法之冒泡排序

本篇是《決勝經典算法》系列文章的第一篇,做爲開篇,先向各位讀者說明一下本系列的幾個「原則」。算法

  1. 由淺入深:剛一開始將會分享很易懂、易於理解的算法。好比本文講述的冒泡排序法就能夠稱得上是最爲簡單的算法了;
  2. 思路優先,代碼爲輔:對於任何一種算法,能夠說思路是最重要的。有了思路,至關於成功了一半。另外,雖然不一樣的程序語言的語法等有所差別,但解題思路是大致一致的。所以,在擺出實際代碼前,會詳細地說明解題思路;
  3. 更易理解的圖示:本系列文章會盡量地多采用圖示甚至動圖來解釋算法中的每一步,讓讀者理解起來更加直觀。

第一部分,咱們來聊一聊排序。單說排序算法,有近十種。不一樣的算法對應不一樣的應用場景(有關不一樣排序算法的性能比較,將在完整介紹完10種排序算法後統一說明)。
閒話少說,接下來咱們就來看第一種排序算法,也是本系列中最爲簡單的一種算法——冒泡排序法。編程

問題挑戰

現有以下數字:
3,44,38,5,47,15,36,26,27,2,46,4,19,50,48
一共15個數字,請將其從小到大依次排列。bash

算法解析

所謂「冒泡排序」,能夠從名稱上理解。「冒泡」實際上就是指把值更大的元素放到數列的後面來(若是是從大到小排列,則反之),好像是這個元素「浮」了過來。咱們先來大體地看下面的動圖,感覺一下冒泡排序的運行過程:編程語言

冒泡排序全過程

怎麼樣?有沒有感受到一個個值更大的元素一點點地「冒泡」到了右端?
是否是有點眼花繚亂?彆着急,下面咱們逐步拆解。性能

詳細步驟

咱們來看一下冒泡排序的詳細步驟:spa

  1. 比較相鄰的元素。若是第一個比第二個大,就交換他們兩個。
  2. 對每一對相鄰元素作一樣的工做,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數
  3. 針對全部的元素重複以上的步驟,除了最後一個。
  4. 持續每次對愈來愈少的元素重複上面的步驟,直到沒有任何一對數字須要比較。

冒泡排序流程圖

僞代碼

有了詳細步驟,咱們就可使用僞代碼實現了,參考下面的僞代碼:3d

BubbleSort(input ele[],input length)  
    for i <- 1 to length step 1  
        for j <- i+1 to 0 step -1  
            if ele[j] < ele [j - 1]  
                swap (ele[j],ele[j - 1])  
            end if  
    end   
end
複製代碼

Java代碼實現

下面啓動IDE,使用Java編程語言實現它吧!code

public void bubbleSort(int[] arr) {
	for (int i = 1; i < arr.length; i++) {
		for (int j = 0; j < arr.length - i; j++) {
			if (arr[j] > arr[j + 1]) {
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}
複製代碼

上述代碼中,參數arr表示未經排序的數列。該方法運行結束後,arr將變爲從小到大排序的數列。cdn

思考題

  1. 若是要實現從大到小排列,上述代碼該作如何修改呢?

思考題答案將在下篇連載中公佈,你們加油哦!blog

相關文章
相關標籤/搜索