1 演算法之氣泡排序

2021-07-09 03:29:54 字數 1190 閱讀 4980

氣泡排序是一種比較容易接收的排序,它穩定而且易於實現,其主要思想如下:

給定乙個隨機序列array(這裡我們為了突出演算法認為array內的元素是int型別),再給定兩個下標i,j分別用來指向兩個要比較和交換的物件,設i的初始值為0(i的含義代表著排序的輪數),讓j的初始值為1(即每次讓j從第二個位置開始),每次比較array[j]和array[j - 1]的大小關係,如果array[j - 1] > array[j](公升序情況),則交換array[j]和array[j - 1]的值。每當j遍歷完待排序序列地時候,該序列的最大值已經在整個序列的末尾。然後讓i增加1(代表當前排好序的元素又增加了乙個)。

我們給出如下序列進行實際的演練:

根據上述的演算法描述,我們給出氣泡排序的c語言實現:

//氣泡排序

void bubble_sort(int *array, int length)

} }

}

上述的排序中我們缺少一些相應的優化措施,如果是乙個已經排好序的序列使用上述的方案進行排序的話,則在第一次的迴圈中則不會出現交換的過程(因為前乙個資料的值總是小於後乙個資料),所以我們以是否發生了交換作為排序是否結束的標誌。及如果一輪排序中並沒有發生交換過程則說明當前的序列是已序的。

修改方案:

所以可以乙個標記flag來表示當前的狀態,在每輪比較的開始把flag置為0,則代表沒有發生排序,如果發生了排序,則把flag值為1,在下次的迴圈中繼續進行比較。

**如下:

//優化後的排序

下面我們使用氣泡排序對隨機序列盡心排序,檢視少量資料情況下和大量資料情況下需要消耗的時間。

//氣泡排序的測試

int main(int argc, char **argv)

排序演算法之(1) 氣泡排序

無論你學習哪種程式語言,在學到迴圈和陣列時,通常都會介紹一種排序演算法來作為例子,而這個演算法一般就是氣泡排序。氣泡排序 bubble sort 一種交換排序,它的基本思想是 兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止。這裡實現最簡單最容易想到的一種 輔助函式 交換兩個變數 v...

排序演算法之(1) 氣泡排序

氣泡排序總共進行n 1趟,每一趟掃瞄總是通過兩兩比較把大的往後放。所以第一趟即把最大數放在最後面,接著第二趟把第二大數放在倒數第二的位置 到n 1趟完畢。此時僅僅有乙個數未排序。這個數就是最小元素。不再須要掃瞄,此時完畢對全部元素的排序。include using namespace std voi...

排序演算法 1 氣泡排序

氣泡排序是非常容易理解和實現,以從小到大排序舉例 設陣列長度為n。1 比較相鄰的前後二個資料,如果前面資料大於後面的資料,就將二個資料交換。2 這樣對陣列的第0個資料到n 1個資料進行一次遍歷後,最大的乙個資料就 沉 到陣列第n 1個位置。3 n n 1,如果n不為0就重複前面二步,否則排序完成。冒...