C/C++快排函数调用
C语言
qsort函数包含在<stdlib.h>头文件里,有四个参数,没有返回值。
例 :
qsort(s, n, sizeof(s[0]), cmp);
1.数组名,即数组所在的首地址。
2.排序的个数。
3.单个元素的大小。
4.cmp函数
对int类型排序
int cmp(const void * a, const void * b)
{
return (*(int *) a - *(int *) b);
}
对double类型
[严格来说,要判断a, b 是否相等,返回0,但double 数不可能相等,只能返回1或-1]
int cmp(const void * a, const void * b)
{
return ((*(double *)a - *(double*)b>0) ?1:-1);
}
对char排序
int cmp(const void *a, const void * b)
{
return (*(char *) a - *(char *)b);
}
对结构体排序
int cmp(const void * a, const void * b)
{
struct node * aa = (struct node *)a;
struct node * bb =(struct node *)b;
return (((aa->data1)>(bb->data1))?1:-1);
}
对字符串数组
*字符串数组char a[1001]排序
int cmp(const void * a, const void * b)
{
return (strcmp(*(char **)a, *(char **)b));
}
字符串数组char a[][]
int cmp(const void * a, const void * b)
{
return (strcmp((char *)a, (char *)b));
}
C++
C++里面:
sort(a, a+10);
1.要排序的数组的起始地址。
2.结束的地址。
3.默认是从小到大(此时可以不写)也可以从大到小。
对int类型排序
sort(a,a+10);//默认从小到大
//从大到小
bool complare(int a,int b)
{
return a>b;
}
sort(a,a+10,complare);//不需要传入参数
通用排序
函数的第三个参数可以用这样的语句告诉程序你所采用的排序
原则
less<数据类型>()//从小到大排序
greater<数据类型>()//从大到小排序
sort函数还可以实现对字符的排序,排序方法大同小异
sort(a,a+10,greater<char>());
对结构体的快排
#include <bits/stdc++.h>
using namespace std;
struct node
{
int a;
int b;
}t[23222];
bool cmp(struct node c, struct node d)
{
if(c.a==d.a)
return c.b>d.b;//b升序
else
return c.a<d.a;//a降序
}
int main()
{
int p;
while(cin>>p)
{
for(int i=0;i<p;i++)
{
cin>>t[i].a>>t[i].b;
}
sort(t, t+p, cmp);
for(int i=0;i<p;i++)
{
cout<<t[i].a<<t[i].b<<endl;
}
}
return 0;
}
评论区