C語言演算法:氣泡排序法原型,如何比較大小

C語言演算法是以簡單的數學邏輯關係進行大量資料的分析計算,在此以兩個、三個數值之間取最大值或者是比較誰大作為範例,介紹氣泡排序法的原型。

一、兩個數值取最大

如果是兩個數要比較大小的話,程式語言的寫法很簡單,就是兩個If條件判斷:如果「A>B就是A」,如果「B>A就是B」。

一張含有 文字 的圖片

自動產生的描述

二、氣泡排序法原型

在上個步驟已經可以比較兩個數值之間誰比較大的基礎上,要進一步比較三個數值之間哪個比較大?想法很自然,先比較前面兩個誰比較大,取得了前兩個之間的最大值之後,再跟第三個比較,如此便能得到三個數字之間的最大值。進一步而言,沿用這個方式,不管是兩個、三個、四個、五個、甚至是很多個,用同樣結構都可以計算出最大值,這個就是氣泡排序法的概念,比較原始簡單的程式設計演算法。

一張含有 文字 的圖片

自動產生的描述

三、兩個人比誰大

在實務上通常不僅僅是計算出最大值,還會想要知道到底最大的那個人是誰,而如果是兩個數值的話還比較好處理,用先前介紹的邏輯判斷式顯然就可以得到想要的答案,比較大的到底是誰?

C語言演算法:氣泡排序法原型,如何比較大小 3

四、三者誰大的問題

接下來要問的是:三個數值中最大是誰?如果沿用先前第二個步驟的算法結構顯然會有問題。例如如果是A最大,可以算出來最大值是11,但是卻會得到最大的是B而不是A,這是因為原來的條件判斷其實只處理了數值大小,並沒有處理到變數之間的關係位置,也就是誰比較大的問題。

一張含有 文字 的圖片

自動產生的描述

五、變數值如何互換

想解決到底是誰大的問題,首先要介紹互換位置的概念。在程式裡面由於資料都是存放在一個一個的電腦記憶體上面,兩個變數之間是沒有辦法直接換位置的,這個就好像在玩大風吹的時候,遊戲規則是在換位置時只有一個人可以走動,其他的人都要坐在椅子上,在這種情況下,如果是單純兩個人要換座位的話,很顯然至少必須要有第三個椅子可以做替換,也就是這裡看到的變數X。

當變數A和變數B的值想要互換的時候,要先再設定一個虛擬過渡的變數X,暫時先把B的值設定給X,然後把A的值設定給B,最後再把X的值設定給A,如此才能完成了兩個變數之間的資料值互換。

C語言演算法:氣泡排序法原型,如何比較大小 6

六、兩個數值排序

有了兩個資料值互換的算法結構之後,可以進行資料排序了。以最簡單的兩個數值為例,因為它只有兩種可能,如果本來就是B>A,那它已經是由小到大排序了,不需要再做整理,所以只要假設一個狀況,如果是A大於B的話,就用上個步驟介紹的方式互換位置,如此便將兩個數值資料由小排到大。

一張含有 文字 的圖片

自動產生的描述

七、三者之間誰大

在瞭解了兩個變數之間如何互換位置之後,終於可以解決先前第四個步驟的問題,這裡由於涉及到了變數名稱,因此設定文字變數X,並且這裡設計了一個技巧,先假設A與B之間B是比較大的,因此把X文字變數先預設為B,假如真實情況是A比B大,那麼就把A跟B的資料內容做個互換,X文字變數則改成日A,如此等於是已經解決了A與B誰比較大的問題,接下來就便是B跟C誰比較大的問題,而這個在先前第三步驟已經有算法了,沿用算法於是得到想要的答案。

文字敍述部份比較不方便一一針對各種情況進行示範,讀者有興趣可以參考文章下方所附的YouTube影片。

一張含有 文字 的圖片

自動產生的描述

氣泡排序法開始演算法

這篇文章並沒有真正的進行演算法的處理,不過電腦計算機或者設計程式的好處是可以處理大量資料,雖然文章範例只有兩個跟三個數字之間的比較大小,然而如同常見的數學計算模型,有2就有3、有3就有4,同樣算法可以延伸到很大的N,同樣道理在程式設計如果能夠解決兩個數值跟三個數值之間的比較排序問題,並且是有一個結構算法出來,那麼再進一步設計好迴圈就可以達到巨量資料大小及排序的問題,在此就是在演算法中氣泡沫排序法的概念,提供給有興趣的讀者參考。

C語言演算法:氣泡排序法原型,如何比較大小 10
歡迎加入Line社群,口袋裡的VBA小教室!