排序方法之氣泡排序

2021-08-15 12:00:18 字數 1462 閱讀 8914

氣泡排序的三種實現方法:  

氣泡排序是排序中的一種最簡單的排序演算法,下面簡單介紹一下我所了解的三種:  

1.比較相鄰的前後二個資料,如果前面資料大於後面的資料,就將二個資料交換。

2.這樣對陣列的第0個資料到n-1個資料進行一次遍歷後,最大的乙個資料就「沉」到陣列第n-1個位置。

3.n=n-1,如果n不為0就重複前面二步,否則排序完成。    

按照定義很容易寫出**:   

//氣泡排序1  void bubblesort1(int a, int n)  {    

int i, j;    

for (i = 0; i < n; i++)     

for (j = 1; j < n - i; j++)      

if (a[j - 1] > a[j])        

swap(a[j - 1], a[j]);  

下面對其進行優化,設定乙個標誌,如果這一趟發生了交換,則為true,否則為false。明顯如果有一趟沒有發生交換,說明排序已經完成。  

//氣泡排序2 void bubblesort2(int a, int n) {       

int j, k;      

bool flag;

k = n;       

flag = true;       

while (flag) {              

flag = false;              

for (j = 1; j < k; j++)                     

if (a[j - 1] > a[j])                     

swap(a[j - 1], a[j]);                            

flag = true;                     

k--;       

再做進一步的優化。如果有100個數的陣列,僅前面10個無序,後面90個都已排好序且都大於前面10個數字,那麼在第一趟遍歷後,

最後發生交換的位置必定小於10,且這個位置之後的資料必定已經有序了,記錄下這位置,第二次只要從陣列頭部遍歷到這個位置就可以了  

//氣泡排序3

void bubblesort3(int a, int n) {

int j, k;  int flag;  

flag = n;  

while (flag > 0)  {  

k = flag;  

flag = 0;   

for (j = 1; j < k; j++)   

if (a[j - 1] > a[j])    {    

swap(a[j - 1], a[j]);     

flag = j;    

氣泡排序畢竟是一種效率低下的排序方法,在資料規模很小時,可以採用。資料規模比較大時,最好用其它排序方法。

排序之氣泡排序

例 將5個數字進行從大到小排序後輸出。輸入 35 99 18 12 76 輸出 99 76 35 18 12 對於例,氣泡排序大致的思路就是一趟一趟地迴圈比較,每一次迴圈的目的都是將未排序的數字中最小的數字移動到末尾。如 第一趟 xx xx xx xx 12 第二趟 xx xx xx 18 12 第...

排序之 氣泡排序

先科普一下到底什麼是氣泡排序 氣泡排序到底能幹嘛?氣泡排序 bubble sort 是一種 電腦科學領域的較簡單的 排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字...

排序之氣泡排序

氣泡排序是一種交換排序。什麼是交換排序呢?交換排序 兩兩比較待排序的關鍵字,並交換不滿足次序要求的那對數,直到整個表都滿足次序要求為止。演算法思想它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成...