首页 > 编程语言 >冒泡排序算法详解C++程序

冒泡排序算法详解C++程序

时间:2022-12-09 16:00:23浏览次数:38  
标签:状态 int 交换 C++ 详解 冒泡排序 array 排序 比较


(1)冒泡排序算法:(Bubble Sort)首先肯定是一种简单的排序算法,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。

走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

下面举一个简单的例子


原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 |


第一趟排序(外循环)


第一次两两比较6 > 2交换(内循环)


交换前状态| 6 | 2 |


交换后状态| 2 | 6 |


第二次两两比较,6 > 4交换

交换前状态| 2 | 6 | 4 |

交换后状态| 2 | 4 | 6 |


第三次两两比较,6 > 1交换

交换前状态| 2 | 4 | 6 | 1 |

交换后状态| 2 | 4 | 1 | 6 |


第四次两两比较,6 > 5交换

交换前状态| 2 | 4 | 1 | 6 | 5 |

交换后状态| 2 | 4 | 1 | 5 | 6 |


 第五次两两比较,6 < 9不交换

交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |

交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |


第二趟排序(外循环)

第一次两两比较2 < 4不交换

交换前状态| 2 | 4 |

交换后状态| 2 | 4 |


第二次两两比较,4 > 1交换

交换前状态| 2 | 4 | 1 |

交换后状态| 2 | 1 | 4 |


 第三次两两比较,4 < 5不交换

交换前状态| 2 | 1 | 4 | 5 |

交换后状态| 2 | 1 | 4 | 5 |


 第四次两两比较,5 < 6不交换

交换前状态| 2 | 1 | 4 | 5 | 6 |

交换后状态| 2 | 1 | 4 | 5 | 6 |


 第三趟排序(外循环)

第一次两两比较2 > 1交换

交换后状态| 2 | 1 |

交换后状态| 1 | 2 |


 第二次两两比较,2 < 4不交换

交换后状态| 1 | 2 | 4 |

交换后状态| 1 | 2 | 4 |


 第三次两两比较,4 < 5不交换

交换后状态| 1 | 2 | 4 | 5 |

交换后状态| 1 | 2 | 4 | 5 |


第四趟排序(外循环)无交换


第五趟排序(外循环)无交换


排序完毕,输出最终结果1 2 4 5 6 9


冒泡算法之所以被叫做冒泡算法,应为它每趟排序都可以找出待排序元素中最大或者最小的一个,是一个很形象的称呼。


(2)C++源程序如下:


#include<iostream>

using namespace std;

#define N 10

int main()

{

int array[10];

int T=0;

cout<<"请输入"<<N<<"个数,并用空格隔开"<<endl;


for(int i=0;i<N;i++)

{

cin>>array[i];

}

printf("排序前:\n");

for(i=0;i<N;i++)

{

cout<<array[i]<<"  ";

}

for(i=0;i<N-1;i++)

{

for(int j=0;j<N-1-i;j++)

{

if(array[j]>array[j+1])

{

T=array[j];

array[j]=array[j+1];

array[j+1]=T;

}

}

}

printf("\n排序后:\n");

for(i=0;i<N;i++)

{

cout<<array[i]<<"  ";

}

printf("\n");

return 0;

}

运行结果如下:


冒泡排序算法详解C++程序_排序算法


注;在程序中我使用了宏定义,这样的话使程序更加灵活,适应性更强。


标签:状态,int,交换,C++,详解,冒泡排序,array,排序,比较
From: https://blog.51cto.com/u_15907770/5926158

相关文章

  • 《安富莱嵌入式周报》第294期:将C/C++代码转换为各种高级语言,超炫渲染着色器,VS2022新闻
    往期周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104更新视频教程:USB应用实战视频教程第5期:手把手玩转USBHID免驱方式......
  • C++那些事-static
    static那些事关于作者微信公众号:当与不同类型一起使用时,Static关键字具有不同的含义。我们可以使用static关键字:静态变量:函数中的变量,类中的变量静态类的成员:类对......
  • OC之【NSDictionary详解】
    main.m文件#import<Foundation/Foundation.h>#import"Student.h"字典的初始化void//NSDictionary是不可变的NSDictionary*dict=[NSDictionarydictionaryWit......
  • C++那些事-const
    关于作者微信公众号:1.const含义常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。2.const作用可以定义常量constinta=100;......
  • C++笔记(自用)
    《EffectiveC++》条款11在operator=中处理“自我赋值”自我赋值证同测试:if(this==&rhs)return*this;影响并行处理效率记住副本:type*memberO=member;pmember=ne......
  • KubeSphere v3.3.1 权限控制详解
    作者:周文浩,青云科技研发工程师,KubeSphereMaintainer。热爱云原生,热爱开源,目前负责KubeSphere权限控制的开发与维护。KubeSphere3.3.1已经发布一个多月了。3.3.1......
  • C++不知算法系列之排序从玩转冒泡算法开始
    1.前言所谓排序,指把数据群体按个体数据的特征按从大到小或从小到大的顺序存放。排序在应用开发中很常见,如对商品按价格、人气、购买数量等排序,便于使用者快速找到数据。......
  • MYSQL-INNODB索引构成详解
    作者:郑啟龙摘要:对于MYSQL的INNODB存储引擎的索引,大家是不陌生的,都能想到是B+树结构,可以加速SQL查询。但对于B+树索引,它到底“长”得什么样子,它具体如何由一个个字节构成......
  • 【论文精读9】MVSNet系列论文详解-AA-RMVSNet
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • VGG网络结构详解
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......