求C语言冒泡排序注解

来源:百度知道 编辑:UC知道 时间:2024/06/04 21:01:03
这是我C语言课本上的一个程序
例:输入n个正整数,将它们从小到大排序后输出,要求使用冒泡排序算法
//冒泡排序
//输入n个正整数,将它们从小到大排序后输出,要求使用冒泡排序算法

#include<stdio.h>
void swap2(int *,int *);//这里为什么不需要用void swap2(int *px,int *py)
void bubble(int a[],int n);//这里的a[]是整型指针么

int main(void)
{
int n,a[8];
int i;

printf("Enter n(n<=8):");
scanf("%d",&n);
printf("Enter a[%d]:",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
bubble(a,n);

printf("After sorted,a[%d]=",n);
for(i=0;i<n;i++)
printf("%3d",a[i]);
printf("\n");

return 0;
}

void bubble(int a[],int n)
{
int i,j;
for(i=1;i<n;i++)//外部循环
for(j=0;j<n-1;j++)//内部循环,这里为什么j是从0开始到n-1呢?从1开始会怎样?
if(a[j]>a[j+1])
swap2(&a[j],&a[j+1]);
}

void swap2(int *px,int *py)//交换
{
int t;
t=*px;<

1.你可以用void swap2(int *px,int *py),如果不指定指针名字的话在后面定义函数的时候,指针名字就可以随便用
2.a[]是个数组,a自己也可以当做指针来看
3.如果从1开始就会把数组里第一个数跳过去,也就是说默认第一个数是在正确位置上的
4.改进的话你可可以在内部循环之前设个flag,如下
void bubble(int a[],int n)
{
int i,j;
for(i=1;i<n;i++){
int flag = 0;
for(j=0;j<n-1;j++){
if(a[j]>a[j+1]){
swap2(&a[j],&a[j+1]);
if(flag ==0)
flag = 1;
}
if(flag==0)
break;
}
}
}

#include<stdio.h>
void swap2(int *,int *);//在函数声明的时候不需要写得太详细,只要能区分各个函数就可以了,所以不用写出形参名
void bubble(int a[],int n);//这里的a[]是数组作为形参

int main(void)
{
int n,a[8];
int i;

printf("Enter n(n<=8):");
scanf("%d",&n);
printf("Enter a[%d]:",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
bubble(a,n);

printf("After sorted,a[%d]=",n);
for(i=0;i<n;i++)
printf("%3d",a[i]);
printf(