C++ qsort函数 详解 快速排序
qsort排序 是快速排序,时间复杂度是nlog2(n)
用起来挺方便的。
控制排序方向的cmp函数,默认是从小到大,return返回语句:若为1,则按照参数列表,第一个参数排在第二个参数之后,若为-1,则相反,若为0,二数相等,无所谓。
/*
C++ qsort函数 练习3:对结构体排序
anthor:nice1998
time:2018.8.5
*/
#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdlib.h>
using namespace std;
struct node
{
int data;
int d;
}a[100];
int cmp(const void *a,const void *b)
{
node *k=(node *)a;
node *j=(node *)b; // 这个地方 必须先把a和b进行类型转换,不能在return里进行类型转换,否则报错
return k->data-j->data;// 如果return的结果大于等于1,那么,按照参数列表,a将会被排在b后面,
}
int main()
{
int n,i,j,k;
cin>>n;
for(i=0;i<n;i++)
{
scanf("%d",&a[i].data);
a[i].d=i+1;
}
qsort(a,n,sizeof(a[0]),cmp);
for(i=0;i<n;i++)
printf("%d %d\n",a[i].d,a[i].data);
return 0;
}
/*
C++ qsort函数 练习3:对结构体排序
anthor:nice1998
time:2018.8.5
*/
#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdlib.h>
using namespace std;
struct node
{
int data;
int d;
}a[100];
int cmp(const void *a,const void *b)
{
node *k=(node *)a;
node *j=(node *)b; // 这个地方 必须先把a和b进行类型转换,不能在return里进行类型转换,否则报错
if(k->data==j->data)
return k->d-j->d;
else
return k->data-j->data;// 如果return的结果大于等于1,那么,按照参数列表,a将会被排在b后面,
}
int main()
{
int n,i,j,k;
cin>>n;
for(i=0;i<n;i++)
{
scanf("%d",&a[i].data);
a[i].d=i+1;
}
qsort(a,n,sizeof(a[0]),cmp);
for(i=0;i<n;i++)
printf("%d %d\n",a[i].d,a[i].data);
return 0;
}