日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

C++實(shí)現(xiàn)雙向起泡排序算法_C 語(yǔ)言

作者:學(xué)得放不下 ? 更新時(shí)間: 2022-12-09 編程語(yǔ)言

起泡排序的基本思想

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

雙向起泡排序?qū)崿F(xiàn)如下

#include<iostream>
using namespace std;

// 交換兩個(gè)數(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

原文鏈接:https://blog.csdn.net/m0_48205050/article/details/127751222

欄目分類(lèi)
最近更新