文档介绍:利用冒泡排序算法进行排序
项目说明:
该算法是用来实现数据排序的。
利用冒泡算法对自动生成的一百个数字进行排序,冒泡排序是一种典型的交换排序方法,基本思路是:通过无序区中相邻记录关键字间的比较和位置的交换,使关键字最小的记录如气泡一般逐渐往上“漂浮”直到“水面”。整个算法是从最下面的记录开始,对每两个相邻的关键字进行比较,且使关键字较小的记录换至关键字较大的记录之上,使得经过排序之后,关键字最小的记录到达最上端。
该项目的调试环境为VisualC++,该环境的使用过程为:
如图为进入该环境所需要的步骤:
该图为进入VC环境的第一步,其说明了要调试该项目所要选择的一些内容:
如图二为第二步在该不中我们要选择第三个类型:
如图为我们完成以上步骤后所得出的结果:
下面为我所调试的项目:
源码分析:
冒泡排序的算法过程如下:
#define Max 100
void bubsort(int r[],int n) /*冒泡排序*/
{
int i,j,k;
int temp;
for(i=0;i<n;i++)
{for(j=n-1;j>i;j--)
if(r[j]<r[j-1]) /*如果a[j]比前面a[j-1]的小,则交换向上浮*/
{ /*交换数组a[j]和a[j-1]*/
temp=r[j];
r[j]=r[j-1];
r[j-1]=temp;
}
printf(" i=%d",i);
for(k=0;k<n;k++)
printf("%2d",r[k]);
printf("\n");
}
}
该代码的实现过程就是:
依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后直到排好。
int i,u;
int a[100];
srand((unsigned)time(NULL));
FILE *fp;
fp = fopen("data1.dat", "w");
for(i=0;i<100;i++)
{
u=rand()%1000;
while(u>100&&u<999)
{
u=rand()%1000;
}
fprintf(fp, "%d ", u);//将这些整数写入到数据文件dat
}
fclose(fp);
fp = fopen("data1.dat", "r");
for(i=0;i<100;i++)
{
fscanf(fp,"%d",&a[i]);//从数据文件data1.dat中读出数据
}
fclose(fp);
bubsort(a,100);
fp = fopen("dat