这是我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;
*px=*py;
*py=t;
}
最后还有一个问题,如何对排序进行改进,就是比如排序循环到n-2次的时候已经排好了序,就不再需要循环第n-1次了,也就是当发现一遍循环后没有数据发生交换的时候跳出循环,输出已经排好了序
我知道问题比较多,可能您会有点烦,不过回答得好的话我一定会等价交换的