冒泡排序演算法總結

來源:互聯網
上載者:User

標籤:blog   資料   for   div   代碼   amp   log   演算法   

冒泡排序演算法是思路最簡單、最直接的排序方法之一。

每遍曆一遍,則將最大(或者最小)的一個數冒泡出來。

預先定義的排序類型。由於只是為了驗證排序方法是否正確,所以此處只是簡單的對10個元素進行排序檢測。如下所示:

#define MAXSIZE 10typedef struct  {int r[MAXSIZE+1];int length;}SqList;void swap(SqList *L,int i,int j){  int temp = L->r[i];  L->r[i] = L->r[j];  L->r[j] = temp;}

備忘:本文中的所有排序都是按照升序進行排序的。

第一種:有點像選擇排序的冒泡排序演算法:

這種方法並不是傳統意義上的冒泡法。傳統上的冒泡法是對排序數組中的相鄰的元素進行比較、交換,而這種方法是用每一個元素與剩下的元素進行比較、交換。代碼如下所示:

void BubbleSort0(SqList *L){int i,j;for (i = 0; i < L->length-1; i++){for (j = i+1; j < L->length;j++){if (L->r[i] > L->r[j]){swap(L,i,j);}}}}

第二種:傳統的冒泡排序法:

void BubbleSort1(SqList *L){int i,j;for (i = 0; i < L->length; i++){for (j = 0; j < L->length - i -1; j++){if (L->r[j] > L->r[j+1]){swap(L,j,j+1);}}}}

第三種:改進後的冒泡排序法

我們知道,在冒泡排序演算法中,即使後面的元素序列已經有序了,不需要再進行比較時,冒泡排序演算法依舊會執行到底。那麼能不能將其進行改進,當遇到這樣的情況時,避免多餘的比較操作呢?

可以設定一個標識位,當沒有遇到交換資料時,就說明已經排好序了。那麼演算法即可停止運行。具體代碼如下所示:

void BubbleSort2(SqList *L){int i,j;bool flag = true;for ( i = 0; i < L->length && flag; i++){flag = false;for (j = 0; j < L->length-1-i; j++){if (L->r[j] > L->r[j+1]){swap(L,j,j+1);flag = true;}}}}

 

參考資料:《大話資料結構》

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.