最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年04月27日 16:40:29   作者:ChanJose  
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)雙向冒泡排序算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C++實(shí)現(xiàn)雙向冒泡排序算法的具體代碼,供大家參考,具體內(nèi)容如下

一、概念(來(lái)源于百度百科)

傳統(tǒng)冒泡算法原理

冒泡排序算法的運(yùn)作如下:(從后往前)

1.比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。

2.對(duì)每一對(duì)相鄰元素作同樣的工作,從開(kāi)始第一對(duì)到結(jié)尾的最后一對(duì)。在這一點(diǎn),最后的元素應(yīng)該會(huì)是最大的數(shù)。

3.針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)。

4.持續(xù)每次對(duì)越來(lái)越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較。

雙向冒泡算法原理

雙向冒泡排序算法的運(yùn)作如下:

1.傳統(tǒng)冒泡氣泡排序的雙向進(jìn)行,先讓氣泡排序由左向右進(jìn)行,再來(lái)讓氣泡排序由右往左進(jìn)行,如此完成一次排序的動(dòng)作

2.使用left與right兩個(gè)旗標(biāo)來(lái)記錄左右兩端已排序的元素位置。

一個(gè)排序的例子如下所示:

排序前:45 19 77 81 13 28 18 19 77 11

往右排序:19 45 77 13 28 18 19 77 11 [81]

向左排序:[11] 19 45 77 13 28 18 19 77 [81]

往右排序:[11] 19 45 13 28 18 19 [77 77 81]

向左排序:[11 13] 19 45 18 28 19 [77 77 81]

往右排序:[11 13] 19 18 28 19 [45 77 77 81]

向左排序:[11 13 18] 19 19 28 [45 77 77 81]

往右排序:[11 13 18] 19 19 [28 45 77 77 81]

向左排序:[11 13 18 19 19] [28 45 77 77 81]

如上所示,括號(hào)中表示左右兩邊已排序完成的部份,當(dāng)left >= right時(shí),則排序完成。

二、實(shí)現(xiàn)程序:

#include <iostream>
#include <ctime>
 
const int MAX = 30;
 
// 交換兩個(gè)數(shù)
void Swap(int &x, int &y) {
  int temp;
  
  temp = x;
  x = y;
  y = temp;
}
 
// 雙向冒泡排序
void twoBubbleSort(int arr[], int len) {
  int left, right, shift, i; // shift為記錄左右兩端已排序的元素位置
  
  left = 0;
  right = len - 1;
  shift = 1;
  while(left < right) { // 往右排序
    for(i = left; i < right; i++) {
      if(arr[i] > arr[i+1]) { // 第一個(gè)數(shù)比第二個(gè)數(shù)大,交換
        Swap(arr[i], arr[i+1]);
        shift = i;
      }
    }
    right = shift;
    for(i = right-1; i >= left; i--) { // 向左排序
      if(arr[i] > arr[i+1]) { // 第一個(gè)數(shù)比第二個(gè)數(shù)大,交換
        Swap(arr[i], arr[i+1]);
        shift = i + 1;
      }
    }
    left = shift;
  }
}
 
int main(int argc, const char * argv[]) {
  // insert code here...
  int arr[MAX], i;
  
  srand((int)time(NULL)); // 設(shè)置時(shí)間為隨機(jī)點(diǎn)
  std::cout << "排序前:";
  for(i = 0; i < MAX; i++) {
    arr[i] = rand() % 100;
    std::cout << arr[i] << " ";
  }
  
  // 調(diào)用雙向冒泡排序函數(shù)
  twoBubbleSort(arr, MAX);
  
  std::cout << "\n排序后:";
  for(i = 0; i < MAX; i++)
    std::cout << arr[i] << " ";
  std::cout << std::endl;
  return 0;
}

運(yùn)行結(jié)果:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++迭代器iterator詳解

    C++迭代器iterator詳解

    這篇文章主要為大家詳細(xì)介紹了C++迭代器模式Iterator,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下希望能給你帶來(lái)幫助
    2021-08-08
  • C/C++?Qt數(shù)據(jù)庫(kù)與SqlTableModel組件應(yīng)用教程

    C/C++?Qt數(shù)據(jù)庫(kù)與SqlTableModel組件應(yīng)用教程

    SqlTableModel?組件可以將數(shù)據(jù)庫(kù)中的特定字段動(dòng)態(tài)顯示在TableView表格組件中,這篇文章將主要介紹SqlTableModel組件一些常用的操作,需要的朋友可以參考一下
    2021-12-12
  • C語(yǔ)言堆與二叉樹(shù)的順序結(jié)構(gòu)與實(shí)現(xiàn)

    C語(yǔ)言堆與二叉樹(shù)的順序結(jié)構(gòu)與實(shí)現(xiàn)

    堆是計(jì)算機(jī)科學(xué)中一類特殊的數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱,通常是一個(gè)可以被看做一棵完全二叉樹(shù)的數(shù)組對(duì)象。而堆排序是利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。本文將詳細(xì)介紹堆與二叉樹(shù)的順序結(jié)構(gòu)與實(shí)現(xiàn),需要的可以參考一下
    2022-05-05
  • 基于Matlab LBP實(shí)現(xiàn)植物葉片識(shí)別功能

    基于Matlab LBP實(shí)現(xiàn)植物葉片識(shí)別功能

    局部二值模式(LBP)是由Ojala等人于2002年提出,它被用于特征提取,而且提取的特征是圖像的紋理特征。本文將利用Matlab和LBP實(shí)現(xiàn)植物葉片識(shí)別,需要的可以參考一下
    2022-02-02
  • C++代碼實(shí)現(xiàn)掃雷游戲

    C++代碼實(shí)現(xiàn)掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C++代碼實(shí)現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • Qt自定義圖形實(shí)現(xiàn)拖拽效果

    Qt自定義圖形實(shí)現(xiàn)拖拽效果

    這篇文章主要為大家詳細(xì)介紹了Qt自定義圖形實(shí)現(xiàn)拖拽效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的猜數(shù)字游戲

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的猜數(shù)字游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的猜數(shù)字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++計(jì)算整數(shù)序列的最長(zhǎng)遞增子序列的長(zhǎng)度操作

    C++計(jì)算整數(shù)序列的最長(zhǎng)遞增子序列的長(zhǎng)度操作

    這篇文章主要介紹了C++計(jì)算整數(shù)序列的最長(zhǎng)遞增子序列的長(zhǎng)度操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • C++實(shí)現(xiàn)十進(jìn)制數(shù)轉(zhuǎn)為其它進(jìn)制數(shù)

    C++實(shí)現(xiàn)十進(jìn)制數(shù)轉(zhuǎn)為其它進(jìn)制數(shù)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)十進(jìn)制數(shù)轉(zhuǎn)為其它進(jìn)制數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C語(yǔ)言實(shí)現(xiàn)經(jīng)典windows游戲掃雷的示例代碼

    C語(yǔ)言實(shí)現(xiàn)經(jīng)典windows游戲掃雷的示例代碼

    今天我們會(huì)用C語(yǔ)言實(shí)現(xiàn)一個(gè)經(jīng)典的windows小游戲:掃雷。掃雷是一款單機(jī)小游戲,每次通關(guān)最高難度的關(guān)卡都會(huì)開(kāi)心好一陣?,F(xiàn)在學(xué)會(huì)了C語(yǔ)言,總算可以自己實(shí)現(xiàn)掃雷了。話不多說(shuō),咱們開(kāi)始吧
    2022-10-10

最新評(píng)論

江油市| 孟津县| 西平县| 静安区| 台南市| 堆龙德庆县| 锡林郭勒盟| 西充县| 进贤县| 原平市| 江津市| 板桥市| 宝清县| 上高县| 商河县| 洪洞县| 呼和浩特市| 黑龙江省| 宁武县| 扎鲁特旗| 九江市| 会昌县| 噶尔县| 尤溪县| 农安县| 班戈县| 大埔县| 耿马| 高要市| 郎溪县| 元阳县| 普定县| 芒康县| 乐安县| 旺苍县| 黄山市| 鹤壁市| 常德市| 西安市| 旅游| 札达县|