zoukankan      html  css  js  c++  java
  • 【qsort】各种用法--原创(c)

                                                                         qsort--快排                                                                 

               用错了N久  wr的不行。。。最后换成sortA了。。。

    基本:头文件<stdlib.h>

    qsort(s,n,sizeof(s[0]),cmp);

    s-数组名

    n-需要排序的个数

    sizeof(s[0])-每个数据所占内存

    cmp-判断函数

    整数数组排序:

    #include <stdio.h>
    #include <stdlib.h>
    
    int cmp ( const void *a , const void *b ) 
    { 
    return *(int *)a > *(int *)b; 
    } 
    
    int main()
    {
        int a[5]={3,6,1,4,8},i;
        qsort(a,5,sizeof(a[0]),cmp);
        for(i=0;i<5;i++)
        printf("%d  ",a[i]);
    }

    //这是从小到大排序--改变cmp里的符号(‘>’--从小到大||'<'--从大到小)

    char类型数组排序:

    #include <stdio.h>
    #include <stdlib.h>
    
    int cmp ( const void *a , const void *b ) 
    { 
    return *(char *)a > *(char *)b; 
    } 
    
    int main()
    {
        char a[5]={'3','6','1','4','8'},i;
        qsort(a,5,sizeof(a[0]),cmp);
        for(i=0;i<5;i++)
            printf("%c  ",a[i]);
    }

    //和int一样  只是改变cmp里的数据类型

    double型 据说需要x>y?1:-1;虽然不知道为啥:

    #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[5]={3.3,6.1,1.4,4.3,8.2};
        int i;
        qsort(a,5,sizeof(a[0]),cmp);
        for(i=0;i<5;i++)
            printf("%.2lf   ",a[i]);
    }


    结构体排序:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct In    //注意typedef
    {
        int a;
        double b;
    }lim;
    
    int cmp ( const void *p , const void *q ) 
    { 
        const lim * n = (const lim *)p;
        const lim * m = (const lim *)q;
        if(n->a > m->a )      //判断大小顺序
            return 1;
        else if(n->a < m->a)
            return -1;
        else
            return 0;
    } 
    
    int main()
    {
        int a[5]={3,6,1,4,8};
        int i;
        lim s[5];
        for(i=0;i<5;i++)
            s[i].a=a[i];
        qsort(s,5,sizeof(s[0]),cmp);
        for(i=0;i<5;i++)
            printf("%d   ",s[i].a);
    }

    结构体里数组排序:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct  
    { 
    int data; 
    char str[100]; 
    }lim;
    
    int cmp ( const void *a , const void *b ) 
    { 
        const lim * n = (const lim *)a;
        const lim * m = (const lim *)b;
        return strcmp(m->str , n->str ); //改变这个位置 改变排序方向
    } 
    
    int main()
    {
        int a[5]={3,6,1,4,8};
        int i;
        lim s[5];
        printf("输入3个字符串:
    ");
        for(i=0;i<3;i++)
            gets(s[i].str);
        qsort(s,3,sizeof(s[0]),cmp);
        for(i=0;i<3;i++)
            puts(s[i].str);
    }

    //看不懂下面的

    七、计算几何中求凸包的cmp 
    int cmp(const void *a,const void *b) //重点cmp函数,把除了1点外的所有点,旋转角度排序
    {
    struct point *c=(point *)a;
    struct point *d=(point *)b;
    if( calc(*c,*d,p[1]) < 0) return 1;
    else if( !calc(*c,*d,p[1]) && dis(c->x,c->y,p[1].x,p[1].y) < dis(d->x,d->y,p[1].x,p[1].y)) //如果在一条直线上,则把远的放在前面
    return 1;
    else return -1;
    }
  • 相关阅读:
    linux下golang的配置
    为什么有闭包?
    分布式之高性能IO组件
    ECMAScript 5.1 Edition DOC 学习笔记
    直线光栅画法
    【计算机基础】三、指令与指令执行过程
    ThreadLocal的使用
    【设计模式】单例模式
    问题记录
    【Java基础】- 泛型
  • 原文地址:https://www.cnblogs.com/zhangfengnick/p/4925884.html
Copyright © 2011-2022 走看看