排序算法(一)-----冒泡法

2022-06-14 08:31:25 浏览数 (1)

冒泡法的本质就是相邻元素相互比较,比较大元素往上抛,正如气泡冒泡一下。故冒泡法得名。是交换法的一种。

代码语言: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;
   	}

0 人点赞