小编这次要给大家分享的是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++如何实现双向冒泡排序算法的文章,如果觉得文章内容写得不错的话,可以把它分享出去给更多人看到。