请教一道关于排序的问题
根据下列函数接口,实现该函数.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; } } }
除了冒泡法和选择法还有什么排序方法呢?或者说这道题还有什么更好的方法呢?谢谢!