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

2021-06-27 04:12:30 字數 4264 閱讀 4460

1、氣泡排序的概念網上一大堆,這裡也就不複製了。下面主要是我的一些理解,算是在此做個筆記吧!

2、「冒泡」是乙個很形象的比喻,下面先看一段簡單的**:

intnnum = ;

intncount =sizeof(nnum) /sizeof(nnum[0]);

intnmax = nnum[0];

for(inti = 1; i

這段**很簡單,執行的結果是找出一組數中的最大值,執行完後nmax應該等於9;

3、根據上述**,那麼要實現排序,即將一組數由大到小(降序)排列或是由小到大(公升序)排列,只要重複上述**就可以了。具體如下(以找出大值為例):

(1)從一組數中找出最大的數,並儲存,執行步驟(2);

(2)將(1)中找出的數從這組數中剔除,執行步驟(3);

(3)判斷這組數的個數是否小於2,若否,則執行(1),若是,則確定大小完成,執行(4);

(4)根據要求(公升序還是降序)給出結果;

注意:如果待排序數原有n個,那麼找出最大值的操作要執行n-1次;

4、上述邏輯演算法有了,但是在實現(2)的時候遇到了問題,如何真正移除乙個陣列中的元素?這個問題顯然不是一兩句話能說清楚的,這裡就換一種實現方式:

為了簡便,將待排序數放入vector中。

5、實現**如下(貌似有點繞):

// bubble_sort_test.cpp : 定義控制台應用程式的入口點。

//

#include "stdafx.h"

#include

#include

usingnamespacestd;

int_tmain(intargc, _tchar* argv)

;

// 待排序數的個數

constintncount =sizeof(nnum) /sizeof(nnum[0]);

// 用vector儲存待排序數

vector <int> vectornum;

for(inti = 0; i

// 用於儲存排序結果

intnsort[ncount] = ;

// 排序

for(inti = 0; i// ncount個數,需要求最大值ncount-1次

nsort[i] = nmax;// 儲存

vectornum.erase(vectornum.begin() + npos);// 剔除最大值

}

// 最後乙個數的操作

nsort[ncount - 1] = *vectornum.begin();

vectornum.clear();

// 列印

for(inti = 0; i

getchar();

return0;

}

6、上述過程略顯複雜,但是思路卻是冒泡演算法的基礎,實際上冒泡演算法也是這樣一次一次求最大值,只不過這個求的過程中有乙個巧妙的地方:它把一趟求最大值的過程,實現為一趟兩兩交換的過程,最大值自然地被換到了陣列的末尾。以為例:

通過以上9次大小比較,進而交換位置,最後將最大值放到的末尾。

7、根據上述示例,可以這樣實現乙個排序演算法:

(1)從一組數中找出最大的數:通過交換位置,將其放到末尾(這一過程就是冒一次泡),執行步驟(2);

(2)將這組數的個數減1,執行步驟(3);

(3)若冒泡次數小於待排序數的個數減1,執行(1);否則,排序完成。

注意:如果待排序數原有n個,那麼要冒泡n-1次;而如果每次冒泡需要交換資料的個數為m,則需要交換m-1次。

8、實現**:

int_tmain(intargc, _tchar* argv)

;

// 待排序數的個數

constintncount =sizeof(nnum) /sizeof(nnum[0]);

// 氣泡排序

for(inti = 0; i// ncount個數,冒泡ncount-1次

cout <

}

cout <

}

// 輸出結果

排序演算法 1 氣泡排序

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

排序演算法1 氣泡排序

氣泡排序 public class bubblesort int arr 交換變數 int temp 判斷上一次是否進行了排序,若上次沒有進行排序,證明排序已經提前完成,可提前跳出迴圈,結束排序 boolean flag false for int i 0 i arr.length 1 i if f...

排序演算法1 氣泡排序

1.什麼是氣泡排序 氣泡排序 bubble sort 也是一種簡單直觀的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他 們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交 換慢慢 浮 ...