天天看點

c語言初級學習----十大排序算法!

c語言初級學習----基本排序算法----->冒泡排序!

前言:

       在小編剛接觸到數組的時候,腦子裡面抽象的把一維數組了解為一個一維容器,然後容器裡面有若幹個小元素,雜亂無章,但是我們往往處理這些小元素的時候,都會先對這些小元素先進行一定的操作,按一定的特定的順序呈現在容器中。

        排序算法有很多,不同的排序算法分别用于不同的場所,在我之後發表的幾篇文章,我都會和大家介紹我所接觸的幾種排序算法,希望大家取其精華,去其糟粕。

冒泡排序:

======》》顧名思義:把一個數想象成一個水泡,氣泡越大,這個氣泡就要冒在最上面。把一串數列想象成一串氣泡,在每次排序過程中,把大的氣泡放上面,通過不停的進行置換,調序,來達到一個有序數列,換句話說,我們将整個序列周遊一次,都需要将這個序列中最大的氣泡放在最前面,當然這是從大到小的排序過程。如果是從小到大的過程,是上面反的過程。

      先給大家舉個列子:

c語言初級學習----十大排序算法!

                                      冒泡排序

       在這個數列中,我們把整個數列按照從小到大的順序(升序)進行排列,也就是每次取排序序列的最大值放到該序列最後面,第一次排序中,8和3比較大小,因為8 比3 小,是以8與3互換位置,再将8和6進行比較,6仍然比8小,再次進行位置互換,以此類推…

我們能夠知道8在第一排序列中最佳位置應該在數列的最後,第一次冒泡排序我們已經完成。

       确定好8的位置,我們再來确定該數列其它數的位置順序,依次确定6的位置,4的位置,3的位置,最後2的位置隻有一個選擇,不需要冒泡。顯然,我們一串5個數的數列,需要4次外循環次數。

PS:

        這裡,我和大家提一下冒泡排序的優化算法,每次冒泡,我們都不需要和之前冒泡出的最大值進行比較!舉個列子,當我們需要對8進行完成排序,需要内循環4次,排序之後8不再參與數列的排序,是以剩下參加排序的數為:3 6 4 2~~按照這種說法我們每次排序都比之前少一次内循環次數。而不必要每次都拿一個數與除自己之外的所有數進行比較。(好繞人~~~,我都有點暈了!)

應用:

        冒泡法有一個很形象的名字,冒泡法排序是一種就地排序,冒泡排序還是一種穩定的排序,主要應用于待排序的元素規模小。但是從空間複雜度和時間複雜度來說冒泡排序算法并不是最好的排序方法。