下列给定的程序中,函数fun()的功能是:用冒泡法对数组中的n个元素按从大到小的顺序进行排序。

下列给定的程序中,函数fun()的功能是:用冒泡法对数组中的n个元素按从大到小的顺序进行排序。
试题程序:
#include<stdio.h>
#define N 20
void fun(int a[],int n)
{ }
Void main()
{
int a[N]={11,32,-5,2,14},i,m=5;
printf("排序前的数据:");
for(i=0;i<m;i++)
printf("%d ",a[i]);
printf("\n");
fun(a,m);
printf("排序后的顺序:");
for(i=0;i<m;i++)
printf("%d ",a[i]);
printf("\n");
}

void fun(int a[], int n) {
int i, j, k, temp;
// 冒泡排序: 从大到小
for (i = n - 1; i > 0; i = k){
// 每次预置k=0,循环扫描后更新k
for (j = 0, k = 0; j < i; j++){
if (a[j] < a[j+1]){ // 大的放前面
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
k = j; // 保存最后下沉的位置。这样k后面的都是排序排好了的
}
}
}
}已经测试通过了排序前的数据:11 32 -5 2 14
排序后的顺序:32 14 11 2 -5
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-20
#include<stdio.h>
#define N 20
void fun(int a[],int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(a[j]<a[j+1])
t=a[j],a[j]=a[j+1],a[j+1]=t;
}
void main()
{
int a[N]={11,32,-5,2,14},i,m=5;
printf("排序前的数据:");
for(i=0;i<m;i++)
printf("%d ",a[i]);
printf("\n");
fun(a,m);
printf("排序后的顺序:");
for(i=0;i<m;i++)
printf("%d ",a[i]);
printf("\n");
}
第2个回答  2013-11-20
int i,j,t;for(i=n-1;i>=1;i--) for(j=0;j<=i-1;j++) if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; }