编写一个双向冒泡排序算法是什么?

编写一个双向冒泡排序算法是什么?,第1张

解扮世:实现本题厅枣肢功能的算法如下:

void dbubblesort(sqlist r,int n)

{

int i,j,flag

flag=1

i=1

while(flag!=0)

{

flag=0

for(j=ij<n-ij++)

{

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

{

flag=1

r[0]=r[j]

r[j]=r[j+1]

r[j+1]=r[0]

}

}

for(j=n-ij>岩枯ij--)

{

if(r[j]<r[j-1])

{ flag=1

r[0]=r[j]

r[j]=r[j-1]

r[j-1]=r[0]

}

}

i++

}

}

#include <iostream.h>

#define nmbLength 12 //数组大小

void bidirectionalTaxis(int numbers[],int n)

{

bool flag=true//排序条件

int temp

int zCount=(n-1),fCount=0//正反数计数初始化

while(flag)

{

//从反数计数点开始 遍历到n-1,即不遍历已反向排好的

for(int i=fCounti<zCounti++) //冒泡法正向遍历找最大值

{

if(numbers[i]>numbers[i+1])//前一个数大于后一个数,则交换

//使得大数冒到后面去

{

temp=numbers[i]

numbers[i]=numbers[i+1]

numbers[i+1]=temp

}

}

//从最后-1位开始反向遍历到 第一位 ,即不遍历正向已经排好的

for(int j=zCount-1j>fCountj--) //反向遍历,找次大州册穗值

{

if(numbers[j]>numbers[j-1])//后一个数大于前一个数,则交换姿租

//使得大数冒到前面去

{

temp=numbers[j]

numbers[j]=numbers[j-1]

numbers[j-1]=temp

}

}

if (zCount-1==fCount||zCount==fCount)//退出条件

{

flag=false

break// 跳出循环条件,考虑到册卜数组是奇数还是偶数个数

}

zCount--//正数自加,即排好了第zCount+1位数(初始是n)

fCount++//反数自加,即排好了第fCount+1位数(初始是1)

}

}

void main()

{

int a[nmbLength]={2,5,3,4,6,0,9,8,7,1}//要排序数组

cout<<"双向冒泡排序"<<endl<<"排序前: "

for(int i=0i<nmbLengthi++) //遍历A

{

cout<<a[i]

}

cout<<endl

cout<<"排序后: "

bidirectionalTaxis(a,nmbLength)

for(i=0i<nmbLengthi++) //遍历A

{

cout<<a[i]

}

cout<<endl

cout<<"反相输出:"

for(i=nmbLength-1i>=0i--) //遍历A

{

cout<<a[i]

}

cout<<endl

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12523030.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存