冒泡法的本质就是相邻元素相互比较,比较大元素往上抛,正如气泡冒泡一下。故冒泡法得名。是交换法的一种。
代码语言:javascript复制/*该程序为最简单的冒泡法,不适用交换标志,使用两重循环,第一重循环我0~cn-1,第二重循环使用 i 1~ cn,
交换元素使用i个跟第j个元素交换,其时间复杂度为O(n^2/2)*/
#include<stdio.h>
#define cnt 9
int b[cnt]={90,8,7,6,5,4,3,2,10};
void rearange(int b[],int k)
{
int i,j,qw=0;
for(i=0;i<cnt-1;i )
for(j=i 1;j<cnt;j )
{ if(b[i]>b[j])
{
qw=b[i];
b[i]=b[j];
b[j]=qw;
}
}
}
void main(void)
{
int qw=0;
//int i,j,qw=0,k=0;
printf("原数据如下:n");
while(qw<cnt)
{
printf("%dt",b[qw]);
qw ;
}
printf("n");
printf("the new rank is that:n");
/* for(i=0;i<cnt-1;i )
for(j=i 1;j<cnt;j )
{ if(b[i]>b[j])
{
qw=b[i];
b[i]=b[j];
b[j]=qw;
printf("i=%d,j=%dn",i,j);
while(k<cnt)
{
printf("%dt",b[k]);
k ;
}
k=0;
printf("n") ;
}
}*/
qw=0;
rearange(b,cnt);
printf("重新排列后的数据如下:n");
while(qw<cnt)
{
printf("%dt",b[qw]);
qw ;
}
printf("n");
}
代码语言:javascript复制附冒泡方法二: a[j]和a[j 1]交换。
i为:0~n-1;j<0~n-1-i.
void rechange2(int a[],int n)
{
int i,j;
int temp;
for (i=0;i<n-1;i )
for(j=0;j<n-i-1;j )
{
if(a[j]>a[j 1]
{
temp= a[j];
a[j]=a[j 1];
a[j 1]=temp;
}
}
return;
}
为了减少交换次数,如果第一轮交换都不存在交换的话,说排序完成,不需要完成两轮循环
void rechange3(int a[],int n)
{
int i,j;
bool exchange ;
int temp;
for (i=0;i<n-1;i )
{
exchange=fasle;
for(j=0;j<n-i-1;j )
{
if(a[j]>a[j 1]
{
temp= a[j];
a[j]=a[j 1];
a[j 1]=temp;
}
exchang=true;
}
if (!exchange)
return;
}