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; 

猜你喜欢

转载自blog.csdn.net/qq_41325698/article/details/81431689