C++實(shí)現(xiàn)雙向起泡排序算法
起泡排序的基本思想
起泡排序易于冒泡排序算法合并,即向后推出最大數(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)過前面i-1遍的處理,它們已正確地排好序。即就是在一組待排序的數(shù)據(jù)中,兩兩比較數(shù)據(jù)的大小,發(fā)現(xiàn)兩個(gè)記錄的排序次序相反時(shí)就交換位置,直到?jīng)]有反序的記錄為止。也就是說它重復(fù)地走訪過要排序的序列,一次比較兩個(gè)項(xiàng)目,如果他們的順序錯(cuò)誤就把他們交換過來。走訪序列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要做交換動(dòng)作,該序列已經(jīng)排序完成。一趟冒泡,至少可以把值最大的元素送到最后位置(或最上邊);當(dāng)然也可以倒過來做,把值小的元素向前移或向下移,一趟冒泡,至少可以把值最小的元素送到最前面的位置(或最下邊)。
雙向起泡排序?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
以上就是C++實(shí)現(xiàn)雙向起泡排序算法的詳細(xì)內(nèi)容,更多關(guān)于C++雙向起泡排序的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Qt實(shí)現(xiàn)轉(zhuǎn)動(dòng)輪播圖
這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)轉(zhuǎn)動(dòng)輪播圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
C++map,set,multiset,multimap詳細(xì)解析
在C++標(biāo)準(zhǔn)模板庫(STL)中,容器分為關(guān)聯(lián)式容器和序列式容器兩大類,關(guān)聯(lián)式容器主要包括set、map、multiset和multimap,通過索引來訪問元素,本文給大家介紹C++?map,set,multiset,multimap的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧2024-09-09
Matlab實(shí)現(xiàn)統(tǒng)計(jì)集合中各元素出現(xiàn)次數(shù)的示例代碼
統(tǒng)計(jì)數(shù)組中各個(gè)元素?cái)?shù)量是一個(gè)很常用的功能,本文主要為大家介紹了如何利用Matlab優(yōu)雅的統(tǒng)計(jì)集合中各元素出現(xiàn)的次數(shù),感興趣的可以了解一下2022-05-05
設(shè)計(jì)模式中的備忘錄模式解析及相關(guān)C++實(shí)例應(yīng)用
這篇文章主要介紹了設(shè)計(jì)模式中的備忘錄模式解析及相關(guān)C++實(shí)例應(yīng)用,備忘錄模式也經(jīng)常被用來在命令模式中維護(hù)可以撤銷(Undo)操作的狀態(tài),需要的朋友可以參考下2016-03-03

