C:
qsort要加上头文件#include< stdlib.h >
1.对int一维数组快速排序(char 类似)
#include<stdio.h>
#include<stdlib.h>
int cmp( const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
int main()
{
int a[100];
int i;
int n;
scanf("%d",&n);
for(i=0;i<=n-1;i++)
scanf("%d",a+i);
qsort(a,n,sizeof(a[0]),cmp);
for(i=0;i<=n-1;i++)
printf("%d ",a[i]);
}
2.对double型一维数组快速排序(与int型不同)
#include<stdio.h>
#include<stdlib.h>
int cmp( const void *a, const void *b)
{
return *(double *)a>*(double *)b? 1:-1;
}
int main()
{
double a[100];
int i;
int n;
scanf("%d",&n);
for(i=0;i<=n-1;i++)
scanf("%lf",a+i);
qsort(a,n,sizeof(a[0]),cmp);
for(i=0;i<=n-1;i++)
printf("%.3lf ",a[i]);
}
3.对多个字符串(二维)进行排序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int cmp( const void *a , const void *b)
{
return strcmp((char *)a,(char *)b);
}
int main()
{
char s[100][100];
int i,n;
scanf("%d",&n);
getchar();
for(i=0;i<=n-1;i++)
gets(s[i]);
qsort(s,n,sizeof(s[0]),cmp);
for(i=0;i<=n-1;i++)
puts(s[i]);
}
4.对结构体一级排序(int)
#include<stdio.h>
#include<stdlib.h>
struct kuaipai
{
int x;
}s[100];
int cmp( const void *a, const void *b)
{
//struct kuaipai *c=(kuaipai *)a;
//struct kuaipai *d=(kuaipai *)b;
//return c->x>d->x ? 1:-1;
return (*(kuaipai *)a).x-(*(kuaipai *)b).x;
}
int main()
{
int i,n;
scanf("%d",&n);
for(i=0;i<=n-1;i++)
scanf("%d",&s[i].x);
qsort(s,n,sizeof(s[0]),cmp);
for(i=0;i<=n-1;i++)
printf("%d ",s[i].x);
}
5.对结构体二级排序(x按照从小到大排序,x相等时,y从小到大排序)
#include<stdio.h>
#include<stdlib.h>
struct kuaipai
{
int x;
int y;
}s[100];
int cmp( const void *a, const void *b)
{
//if((*(kuaipai *)a).x!=(*(kuaipai *)b).x)
//return (*(kuaipai *)a).x-(*(kuaipai *)b).x;
//else
// return (*(kuaipai *)a).y-(*(kuaipai *)b).y;
struct kuaipai *c=(kuaipai *)a;
struct kuaipai *d=(kuaipai *)b;
if(c->x!=d->x)
return c->x-d->x;
else
return c->y-d->y;
}
int main()
{
int n;
int i;
scanf("%d",&n);
for(i=0;i<=n-1;i++)
scanf("%d %d",&s[i].x,&s[i].y);
qsort(s,n,sizeof(s[0]),cmp);
for(i=0;i<=n-1;i++)
{
printf("%d %d",s[i].x,s[i].y);
printf("\n");
}
}
C++:
sort 头文件 #include<algorithm>
+ using namespace std;
1.一维数组排序
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
bool cmp(int a,int b)//如果是double型的,参数改为double a,double b
{
return a<b;//升序
}
int main()
{
int a[100];
int i;
int n;
scanf("%d",&n);
for(i=0;i<=n-1;i++)
scanf("%d",a+i);
sort(a,a+n,cmp);
for(i=0;i<=n-1;i++)
printf("%d ",a[i]);
}
2.多个字符串排序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
bool cmp(char *a,char *b)
{
return strcmp(a,b)<0;
}
int main()
{
char s[100][100];
char *p[100];
int i;
int n;
scanf("%d",&n);
getchar();
for(i=0; i<=n-1; i++)
{
gets(s[i]);
p[i]=s[i];
}
sort(p,p+n,cmp);
for(i=0; i<=n-1; i++)
printf("%s\n",p[i]);
}
3.对结构体进行排序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct node
{
int x;
int y;
}s[100];
bool cmp(struct node p,struct node q)//如果x相等按照y从小到大排序,否则按照x从小到大排序。
{
if(p.x==q.x)
return p.y<q.y;
return p.x<q.x;
}
int main()
{
int i;
int n;
scanf("%d",&n);
for(i=0; i<=n-1; i++)
scanf("%d %d",&s[i].x,&s[i].y);
sort(s,s+n,cmp);
for(i=0; i<=n-1; i++)
printf("%d %d\n",s[i].x,s[i].y);
}