c++如何实现双向冒泡排序算法

  介绍

小编这次要给大家分享的是c++如何实现双向冒泡排序算法,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。

<强>一、概念(来源于百度百科)

传统冒泡算法原理

冒泡排序算法的运作如下:(从后往前)

1。比较相邻的元素。如果第一个比第二个大,就交换他们两个。

2。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

3。针对所有的元素重复以上的步骤,除了最后一个.

4 .持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

双向冒泡算法原理

双向冒泡排序算法的运作如下:

1。传统冒泡气泡排序的双向进行,先让气泡排序由左向右进行,再来让气泡排序由右往左进行,如此完成一次排序的动作

2。使用左与右两个旗标来记录左右两端已排序的元素位置。

一个排序的例子如下所示:

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

往右排序:19 45 77 77年13 28日18 19 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 19 (77 77 81)

往右排序:13[11]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]

如上所示,括号中表示左右两边已排序完成的部份,当离开祝辞=时,则排序完成。

<强>二,实现程序:

 # include & lt; iostream>
  # include & lt; ctime>
  
  const int MAX=30;//交换两个数
  无效的交换(int, x, int, y) {
  int温度;
  
  temp=x;
  x=y;
  y=temp;
  }//双向冒泡排序
  arr空白twoBubbleSort (int [], int len) {
  int左、右移,我;//转换为记录左右两端已排序的元素位置
  
  左=0;
  正确的=len - 1;
  转变=1;
  而(左& lt;){//往右排序
  (我=左;我& lt;对的;我+ +){
  如果(arr[我]比;加勒比海盗(i + 1)){//第一个数比第二个数大,交换
  交换(arr[我],arr [i + 1]);=我转变;
  }
  }
  正确的=转变;
  (我=右1;我在=左;我——){//向左排的序
  如果(arr[我]比;加勒比海盗(i + 1)){//第一个数比第二个数大,交换
  交换(arr[我],arr [i + 1]);
  转变=i + 1;
  }
  }
  左=转变;
  }
  }
  
  int主要(int命令行参数个数,const char * argv []) {//插入代码…
  int arr (MAX),我;
  
  将srand ((int)时间(NULL));//设置时间为随机点
  std:: cout & lt; & lt;“排序前:“;
  (我=0;我& lt;马克思;我+ +){
  arr[我]=rand () % 100;
  std:: cout & lt; & lt;加勒比海盗[我]& lt; & lt;“;“;
  }//调用双向冒泡排序函数
  twoBubbleSort (arr马克斯);
  
  std:: cout & lt; & lt;“\ n排序后:“;;
  (我=0;我& lt;马克思;我+ +)
  std:: cout & lt; & lt;加勒比海盗[我]& lt; & lt;“;“;
  std:: cout & lt; & lt;std:: endl;
  返回0;
  }

运行结果:

 C + +如何实现双向冒泡排序算法

看完这篇关于c++如何实现双向冒泡排序算法的文章,如果觉得文章内容写得不错的话,可以把它分享出去给更多人看到。

c++如何实现双向冒泡排序算法