首页 > 编程知识 正文

冒泡排序c++代码(双向冒泡排序算法c语言)

时间:2023-05-04 17:14:43 阅读:68453 作者:4071

首先,介绍泡沫排序的基本算法思想。

重复访问要排序的元素列,按顺序比较两个相邻的元素,如果顺序错误(从大到小,从z到a等),则交换它们。

这个算法名字的由来是,越小的元素,通过交换就会慢慢地“浮现”在数列的顶端。 为了使碳酸饮料中的二氧化碳泡沫最终浮在最上面,名字是“泡沫出来进行排序”。

从小到大排序,a[5]={3、5、4、1、0};

首先比较3和5,已经是我们需要的正常顺序,不需要更换位置; 再比较5和4,不是正序,而是相互调换顺序,排列为{3、4、5、1、0}。 再比较5和1,不是正序,而是相互调换顺序,排列为{3、4、1、5、0}。 再比较5和0,不是正序,而是相互调换顺序,排列为{3、4、1、0、5}。 至此,第一次鼓泡完成,最大值5来到序列的最后。

5的位置已经确定了顺序,第2周、5不再参与排序,只要将{3、4、1、0}设为有顺序的顺序即可。

如果数组元素的数量为n,则根据上面第一个回合的比较可以得出以下结论。

如果气泡排序的循环数为I,则气泡排序每结束一次,要素就会增加一个成为规则的状态,所以(n-1 )循环排序结束后,n-1个要素成为规则的状态,剩下的最后一个要素自然会成为最小(大)的值设每一回合的比较次数为j,第一回合(I值0 )的比较次数为4。 从{3、4、1、0}可以看出,第二回合) I值1 )的比较次数为3次,每一回合的比较次数j与鼓泡的次数I值有关,j=n-i-1。 确定了以上两个结论后,我们开始用代码实现冒泡排序算法:

# includeiostreamusingnamespacestd; //a[]按正序(从小到大的顺序)排序voidbubblesort(int*a,int len ) ) /形参a获取实参a传递的数组起始地址(/,求解引用,得到数组的值(for(intI=0) ilen-1; 控制//i排序的循环数{for(intj=0; jlen-i-1; //j控制每回合比较的次数(if ) a[j1]a[j] ) /不满足正序要求而调换顺序) {int temp=a[j]; a[j]=a[j 1]; a[j 1]=temp; }}}}int main () inta [ 10 ]={ 2,6,3,8,5,1,0,7,9,4 }; intlen=sizeof(a )/sizeof (int ); //计算数组元素个数的bubblesort(a,len ); //a是数组a[10]的开始地址,作为实际参考传递给波形参考for(intI=0)的ilen; I ) {couta[i] '; }返回0; )获得正序序列值: 0 1 2 3 4 5 6 7 8 9。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。