欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實現(xiàn)雙向起泡排序算法

 更新時間:2022年11月09日 15:41:31   作者:學得放不下  
這篇文章主要為大家詳細介紹了如何利用C++實現(xiàn)雙向起泡排序算法,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以嘗試一下

起泡排序的基本思想

起泡排序易于冒泡排序算法合并,即向后推出最大數(shù)。將被排序的記錄數(shù)組R[1..n]垂直排列,每個記錄R[i]看作是重量為R[i]的氣泡。根據(jù)輕氣泡不能在重氣泡之下的原則,從下往上掃描數(shù)組R:凡掃描到違反本原則的輕氣泡,就使其向上“飄浮”。如此反復進行,直到最后任何兩個氣泡都是輕者在上,重者在下為止。一般地,第i遍處理時,不必檢查第i個位置以上的元素,因為經過前面i-1遍的處理,它們已正確地排好序。即就是在一組待排序的數(shù)據(jù)中,兩兩比較數(shù)據(jù)的大小,發(fā)現(xiàn)兩個記錄的排序次序相反時就交換位置,直到沒有反序的記錄為止。也就是說它重復地走訪過要排序的序列,一次比較兩個項目,如果他們的順序錯誤就把他們交換過來。走訪序列的工作是重復地進行直到沒有再需要做交換動作,該序列已經排序完成。一趟冒泡,至少可以把值最大的元素送到最后位置(或最上邊);當然也可以倒過來做,把值小的元素向前移或向下移,一趟冒泡,至少可以把值最小的元素送到最前面的位置(或最下邊)。

雙向起泡排序實現(xiàn)如下

#include<iostream>
using namespace std;

// 交換兩個數(shù)
void swap(int &i, int &j)
{
    int t = i;
    i = j;
    j = t;
}

// 打印數(shù)組
void show(int a[], int n)
{
    for(int i = 0; i < n; i++)
    {
        cout << a[i] << " ";
    }
    cout << endl;
}

// 雙向起泡排序
void bubblesort(int a[], int n)
{
    int low = 0, high = n-1;
    bool flag = true;

    while(low < high && flag)
    {   
        flag = false;

        show(a, 10);
        int i = low;
        while(i < high)
        {
            if(a[i] > a[i + 1])
            {
                swap(a[i], a[i + 1]);
                flag = true;
            }
            i++;
        }
        high--;
        
        int j = high;
        while(j > low)
        {
            if(a[j] < a[j-1])
            {
                swap(a[j-1], a[j]);
                flag = true;
            }
            j--;
        }
        low++;
    }
}

int main(){
    int a[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
    int n = 10;

    // 輸出初始狀態(tài)
    // show(a, n);

    // 雙向冒泡排序
    bubblesort(a, n);

    // 排序后輸出
    cout << "after sort" << endl;
    show(a, n);

}

代碼中示例的輸出為:

10 9 8 7 6 5 4 3 2 1 
1 9 8 7 6 5 4 3 2 10 
1 2 8 7 6 5 4 3 9 10
1 2 3 7 6 5 4 8 9 10
1 2 3 4 6 5 7 8 9 10
after sort
1 2 3 4 5 6 7 8 9 10

以上就是C++實現(xiàn)雙向起泡排序算法的詳細內容,更多關于C++雙向起泡排序的資料請關注腳本之家其它相關文章!

相關文章

  • C++并查集算法簡單詳解

    C++并查集算法簡單詳解

    大家好,本篇文章主要講的是C++并查集算法簡單詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • Qt實現(xiàn)轉動輪播圖

    Qt實現(xiàn)轉動輪播圖

    這篇文章主要為大家詳細介紹了Qt實現(xiàn)轉動輪播圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • 在C/C++項目中合理使用宏詳解

    在C/C++項目中合理使用宏詳解

    這篇文章主要介紹了在C/C++項目中合理使用宏詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • QT實現(xiàn)秒表項目

    QT實現(xiàn)秒表項目

    這篇文章主要為大家詳細介紹了QT實現(xiàn)秒表項目,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++ 迷宮游戲實現(xiàn)代碼

    C++ 迷宮游戲實現(xiàn)代碼

    這篇文章主要介紹了C++ 迷宮游戲實現(xiàn)代碼的相關資料,需要的朋友可以參考下
    2017-05-05
  • C++map,set,multiset,multimap詳細解析

    C++map,set,multiset,multimap詳細解析

    在C++標準模板庫(STL)中,容器分為關聯(lián)式容器和序列式容器兩大類,關聯(lián)式容器主要包括set、map、multiset和multimap,通過索引來訪問元素,本文給大家介紹C++?map,set,multiset,multimap的相關知識,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • linux下c語言的多線程編程

    linux下c語言的多線程編程

    這篇文章主要介紹了linux下c語言的多線程編程,需要的朋友可以參考下
    2017-10-10
  • 淺談c++ 預處理器

    淺談c++ 預處理器

    這篇文章主要介紹了c++ 預處理器的的相關資料,文中示例代碼非常詳細,供大家參考和學習,感興趣的朋友可以了解下
    2020-06-06
  • Matlab實現(xiàn)統(tǒng)計集合中各元素出現(xiàn)次數(shù)的示例代碼

    Matlab實現(xiàn)統(tǒng)計集合中各元素出現(xiàn)次數(shù)的示例代碼

    統(tǒng)計數(shù)組中各個元素數(shù)量是一個很常用的功能,本文主要為大家介紹了如何利用Matlab優(yōu)雅的統(tǒng)計集合中各元素出現(xiàn)的次數(shù),感興趣的可以了解一下
    2022-05-05
  • 設計模式中的備忘錄模式解析及相關C++實例應用

    設計模式中的備忘錄模式解析及相關C++實例應用

    這篇文章主要介紹了設計模式中的備忘錄模式解析及相關C++實例應用,備忘錄模式也經常被用來在命令模式中維護可以撤銷(Undo)操作的狀態(tài),需要的朋友可以參考下
    2016-03-03

最新評論