zoukankan      html  css  js  c++  java
  • C语言之qsort

    文章转自:http://acm.hdu.edu.cn/forum/read.php?tid=535

    七种sqort排序方法

    <本文中的排序都是采用从小到大的排序序列>

    int,double,char排序示例:

    #include<stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int cmp( const void *a , const void *b )  
    {  
    	return *(int *)a - *(int *)b;  
    }  
    
    int cmp1( const void *a , const void *b )  
    {  
    	return *(double *)a > *(double *)b?1:-1;
    }
    
    int cmp2( const void *a , const void *b )  
    {  
    	return *(char *)a - *(char *)b;  
    }  
    
    int main(){
    	int a[]={99,88,77,66,55,44,33,22,11,0};
    	double b[]={10.0,9.1,8.2,7.3,6.4,5.5,4.6,3.7,8.2,9.1};
    	char c[100];
    	int i=0,j=1;
    	int len;
    	while(j--)
    	{
    		//整型比较
    		qsort(a,10,sizeof(a[0]),cmp);
    
    		for(i=0;i<10;i++)
    			printf("%d	",a[i]);
    		printf("
    ");
    
    		//浮点数比较
    		qsort(b,10,sizeof(b[0]),cmp1);
    
    		for(i=0;i<10;i++)
    			printf("%.2lf	",b[i]);
    		printf("
    ");
    
    		//字符比较
    		gets(c);
    		len=strlen(c);
    		qsort(c,len,sizeof(c[0]),cmp2); 
    		puts(c);
    
    	}
    	return 0;
    }
    


    一、对int类型数组排序

    int num[100];
    Sample:
    int cmp ( const void *a , const void *b )
    {
    return *(int *)a - *(int *)b;
    }
    qsort(num,100,sizeof(num[0]),cmp);


    二、对char类型数组排序(同int类型)

    char word[100];
    Sample:
    int cmp( const void *a , const void *b )
    {
    return *(char *)a - *(char *)b;
    }
    qsort(word,100,sizeof(word[0]),cmp);

    三、对double类型数组排序(特别要注意)

    double in[100];
    int cmp( const void *a , const void *b )
    {
    return *(double *)a > *(double *)b ? 1 : -1;
    }
    qsort(in,100,sizeof(in[0]),cmp);

    四、对结构体一级排序

    struct In
    {
    double data;
    int other;
    }s[100]
    //按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可以很多种,参考上面的例子写
    int cmp( const void *a ,const void *b)
    {
    return (*(In *)a)->data > (*(In *)b)->data ? 1 : -1;
    }
    qsort(s,100,sizeof(s[0]),cmp);

    五、对结构体二级排序

    struct In
    {
    int x;
    int y;
    }s[100];
    //按照x从小到大排序,当x相等时按照y从大到小排序
    int cmp( const void *a , const void *b )
    {
    struct In *c = (In *)a;
    struct In *d = (In *)b;
    if(c->x != d->x) return c->x - d->x;
    else return d->y - c->y;
    }
    qsort(s,100,sizeof(s[0]),cmp);

    六、对字符串进行排序

    struct In
    {
    int data;
    char str[100];
    }s[100];
    //按照结构体中字符串str的字典顺序排序
    int cmp ( const void *a , const void *b )
    {
    return strcmp( (*(In *)a)->str , (*(In *)b)->str );
    }
    qsort(s,100,sizeof(s[0]),cmp);

    七、计算几何中求凸包的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;
    }
    PS:
    其中的qsort函数包含在<stdlib.h>的头文件里,strcmp包含在<string.h>的头文件里
    

  • 相关阅读:
    几个新角色:数据科学家、数据分析师、数据(算法)工程师
    人类投资经理再也无法击败电脑的时代终将到来了...
    Action Results in Web API 2
    Multiple actions were found that match the request in Web Api
    Routing in ASP.NET Web API
    how to create an asp.net web api project in visual studio 2017
    网站漏洞扫描工具
    How does asp.net web api work?
    asp.net web api history and how does it work?
    What is the difference between a web API and a web service?
  • 原文地址:https://www.cnblogs.com/wangxueliang/p/9346490.html
Copyright © 2011-2022 走看看