從零開始理解氣泡排序

2021-08-22 16:39:30 字數 1781 閱讀 1225

氣泡排序是一種基礎的入門級別的演算法,它的效率比較低,但是理解它的好處是讓我們對演算法有初步的了解,理解了氣泡排序,不僅僅是讓我們寫出乙個簡單演算法,完成入門,筆者認為寫出一段程式除了能夠給我們帶來收入以外,如果你能從寫的**中感受到一絲快樂,這是一種精神享受。下面就讓我們開始理解氣泡排序演算法,然後嘗試著自己去把它寫出來。哪怕過了兩年之後,你仍然能手到拿來,不用過多思考,那麼就算是真正掌握了。

首先,氣泡排序的核心思想是:兩層比較,

什麼是兩層比較呢?假設我現在有乙個陣列

int arr = ;
這個陣列顯然是雜亂無章的,我們不管是要將它公升序排列還是降序排列,其目的都是讓它成為有序的陣列。

那麼,第一層比較,首先需要確定的就是,要想讓這個陣列有序,我需要比較幾輪(注意不是比較幾次)。

氣泡排序的思想是:

每經過一輪比較,我們都要確定乙個最值(有可能是最大值,也有可能是最小值),對於上面的陣列,我們經過第一輪比較可以確定85是最大的,但是其它元素我們仍不能確定其大小關係。

然後,在下一輪比較時,前面幾輪的已經確定的最值就不用參與比較了,只需要比較剩餘的元素即可,在上面的陣列中,第二輪比較,顯然不用考慮85了,它已經在第一輪確定為所有數字中最大的乙個數字,那麼,我們只需要在56,39,66,34這四個數字中再確定乙個最大值,顯然這個值是66.

接著是第三輪比較,此時85和66的位置已經確定了,我們只需要在56,39,34這三個數字中確定乙個最大值,顯然,這個值是56,

然後是第四輪比較,此時85,66,56的位置已經確定了,我們只需要在39和34中間選乙個最大值,顯然這個值是39.

由於85,66,56,39的位置已經確定,所以最後乙個值34的位置也自動確定了(因為只有5個元素,已經佔據了四個位置,那麼剩下的元素只有乙個位置可以選擇)。

一句話總結第一層比較:對於有n個元素的陣列,我需要確定n-1個元素的位置,剩下的乙個位置自動確定。也就是我們需要進行n-1輪比較,比較的目的是,每一輪產生乙個最值。

接下來是第二層比較:即每一輪的比較中,我們需要進行幾次比較(注意,這裡是幾次,而不是幾輪)

很顯然,三個數字,為了確定乙個最值,我們需要比較2次,n個數字,我們需要比較n-1次。

根據氣泡排序的特點,每一輪參與比較的元素個數,都會比上一輪少乙個,所以,我們每一輪需要進行比較的次數也是遞減的,這個規律是:同樣的,每一輪的比較次數,會比上一輪少一次(因為元素個數少了乙個)

做了上面這些準備工作以後,可以寫出氣泡排序的**了(未經優化)

package com.neusoft.baoly;

public class bubblesort ;

mysort(arr);

} /*

*首先確定氣泡排序演算法一共需要比幾輪

*它的思想是每一輪確定乙個最大或者最小值

*這樣需要比較arr.length-1輪,因為當前面所有數字的順序都確定以後

*最後乙個數字是不需要排序的

* *其次需要確定的是每一輪比較幾次

*第一輪還沒有確定最值,也就是說6個數字需要比較5次 5個數字需要比較四次

*第二輪開始之前,已經確定乙個最值了,如果一共有六個數字那麼第二輪開始時只有5個數字的序列

*則第二輪只需要比較四次,第三輪三次,第四輪兩次,第五輪一次,由此確定**

* */

public static void mysort(int arr)

}} for (int k = 0; k < arr.length; k++)

}}

希望大家能感受到程式設計的樂趣,獲得成就感 ^-^

Django 從零開始

方法1 pip install django 1.6.5 測試是否安裝成功 python import django 1,6,5,final 0 django 使用了 python 標準的 distutils 安裝法,在 linux 平台可能包括如下步驟 tar xzvf django tar.gz...

HTML從零開始

一 標籤 1.使用小寫 2.開始標籤常被稱為開放標籤 opening tag 結束標籤常稱為閉合標籤 closing tag 有效 示例 i reallystrong mean thatem 無效 示例 invalid i reallyem mean thatstrong 二 屬性 1.開始標籤包含...

vim 從零開始

相信大家一開始接觸linux時肯定不知道為什麼要用vim這個奇怪的東西,有各種奇怪的模式,還不如直接用gedit,簡單快捷。有關這個問題大家可以去看知乎大神,今天我在這裡只想記錄一下自己使用vim的過程。雖然vim很強大,但是如果沒用配置最初的狀態是很醜也不怎麼好用的。在配置的過程中,我參考了一下幾...