请教一道关于排序的问题
根据下列函数接口,实现该函数.void sort(int a[],int m, int flag)
函数的功能:如果flag==0,则函数实现对数组a的前m个元素进行降序排列,如果flag!=0,则对数组a的前m个元素进行升序排列.
程序代码:#include<stdio.h>
#define N 10
int main() //主函数
{
void sort(int a[],int m, int flag); //声明
int a[N],i,flag; //为了简化,定义数组长度为10
printf("请输入数组各元素:"); //输入
for(i=0;i<N;i++)
scanf("%d",&a[i]);
printf("请输入0或1(0为降序,1为升序):");
scanf("%d",&flag);
sort(a,5,flag); //调用函数,为了简化,只让前5个数进行升序或降序
printf("调整顺序后的各元素顺序为:");
for(i=0;i<N;i++)
printf("%d ",a[i]);
return 0;
}
void sort(int a[],int m,int flag)
{
int i,j,k,t;
if(flag==0) //降序,选择法
{
for(i=0;i<m-1;i++)
{
k=i;
for(j=i+1;j<m;j++)
if(a[j]>a[k])
k=j;
if(k!=i)
{
t=a[k];a[k]=a[i];a[i]=t;
}
}
}
else if(flag==1) //升序,冒泡法
{
for(i=0;i<m-1;i++)
for(j=0;j<m-1-i;j++)
if(a[i]>a[i+1])
{
t=a[i];a[i]=a[i+1];a[i+1]=t;
}
}
}除了冒泡法和选择法还有什么排序方法呢?或者说这道题还有什么更好的方法呢?谢谢!






