1. 程式人生 > >[【筆記】氣泡排序法

[【筆記】氣泡排序法

/*  *    內容:    氣泡排序法  *    作者:    wolves_liu  *    日期:    2018.3.21  *    參考:    大話資料結構  */   // 線性表順序儲存結構 #define        Max        20 typedef struct {     int r[Max+1];     int length; }Sqlist;

// 交換L->r[i]和L->r[j]的值 void swap(Sqlist *L, int i, int j) {     int temp = 0;     temp = L->r[i];     L->r[i] = L->r[j];     L->r[j] = temp; }

// (偽)冒泡演算法1 void BubbleSort0(Sqlist *L)    //小的數放上面去 {     int i, j;     for(i=1; i<L->length; i++)    // 用第i個元素跟它後面的每一個元素都進行比較     {         for(j=i+1; j<=L->length; j++)         {             if(L->r[i] > L->r[j])             {                 swap(L, i, j);    // 交換L->r[i]和L->r[j]的值             }         }     } }

// (正宗)冒泡演算法2 void BubbleSort1(Sqlist *L) {     int i, j;     for(i=1; i<L->length; i++)     {         for(j=L->length-1; j>=i; j--)    // j從倒數第二個開始         {             if(L->r[j] > L->r[j+1])        // 前者 > 後者 就交換             {                 swap(L, j, j+1);             }         }     } }

// (對冒泡演算法進一步優化)冒泡演算法3 void BubbleSort3(Sqlist *L) {     int i = 0, j = 0;     bool flag = 1;                        // 用flag作標記     for(i=1; i<L->length && flag; i++)    // 如果flag為真,就執行迴圈     {         flag = 0;         for(j=L->length-1; j>=i; j--)         {             if(L->r[j] > L->r[j+1])             {                 swap(L, j, j+1);                 flag = 1;                // 如果執行了交換函式,讓flag為真,就可以繼續執行迴圈;                                         // 如果沒有執行交換函式,則flag為假,就不用執行外迴圈了。             }         }     } }

// 自己寫的,r[0]-r[4] void swap(int &a, int &b) {     int temp = a;     a = b;     b = temp; }

int main(int argc, _TCHAR* argv[]) {     int r[5] = {8, 6, 36, 2, 0};

         // 對應(偽)冒泡演算法1     for(int i=0; i<4; i++)     {         for(int j=i+1; j<5; j++)         {             if(r[i] > r[j])             {                 swap(r[i], r[j]);             }         }     }          // 對應(正宗)冒泡演算法2     for(int i=0; i<4; i++)     {         for(int j=3; j>=i; j--)    //j是倒數第二開始         {             if(r[j] > r[j+1])             {                 swap(r[j], r[j+1]);             }         }     }

    for(int i=0; i<5; i++)     {         cout<<(r[i])<<endl;     }            return 0;     }