c里面其实有排序函数的,再也不用自己麻烦写排序函数了
qsort函数是ANSI C标准中提供的,其声明在stdlib.h文件中,是根据二分发写的,其时间复杂度为n*log(n),其结构为:
void qsort(void *base,size_t nelem,size_t width,int (*Comp)(const void *,const void *));
其中:
*base 为要排序的数组
nelem 为要排序的数组的长度
width 为数组元素的大小(一字结为单位)
(* Comp)(const void *p1,const void *p2) 为判断大小函数的指针,这个函数需要自己定义,
如果返回1 , 表示p2要排在p1前面
如果返回0, 表示p1 p2的前后顺序无所谓
如果返回-1, 表示p1要排在p2前面
一、对int类型数组排序
a-b升序 b-a降序
#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a,const void *b);
int main()
{
int a[100],n,i;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
qsort(a,n,sizeof(int),cmp);
for(i=0;i<n;i++)
{
if(i>0)printf(" ");
printf("%d",a[i]);
}
}
}
int cmp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
sizeof(int)和sizeof(a[0])都可以
int型二维数组
#include<stdio.h>
#include<stdlib.h>
int cmp(int*a,int*b);
int main()
{
int a[100][100],n,i,m,j;
while(scanf("%d %d",&n,&m)!=EOF)
{
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
qsort(a,n,sizeof(int),cmp);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(j>0)printf(" ");
printf("%d",a[i][j]);
}
printf("\n");
}
}
}
int cmp(int*a,int*b)
{
return ((int *)a)[0]-((int *)b)[0];
}