C语言函数模板

来源:互联网 发布:北京plc编程培训学校 编辑:程序博客网 时间:2024/05/01 00:22

(1)n的平方的sort:

void sort(struct point *ps,int n){//按Y升序,相同按X升序
  int i,j;
  struct point temp;
  for(i=0;i<n;i++)
    for(j=i+1;j<n;j++){
      if((ps+i)->y>(ps+j)->y){
        temp=*(ps+i);
        *(ps+i)=*(ps+j);
        *(ps+j)=temp;
      }
      else if((ps+i)->y==(ps+j)->y){
        if((ps+i)->x>(ps+j)->x){
          temp=*(ps+i);
          *(ps+i)=*(ps+j);
          *(ps+j)=temp;
        }
      }
    }
}

sort(node,n);

(2)min函数:

double min(double a,double b){
  if(a<=b)
    return a;
  if(a>b)
    return b;
}

min(a,b);


八种qsort排序方法


PS:

其中的qsort函数包含在<stdlib.h>的头文件里,strcmp包含在<string.h>的头文件里


<均采用从小到大排序>


一、对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 - *(int *)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;

}

八、数组作为下标,对结构体进行排序

int cmp( const void *a ,const void *b){
  double  temp = ((struct point*)a)->y-((struct point*)b)->y;
    if(temp>0)
        return 1;
    else if(temp==0)
        return 0;
    else
        return -1;
}

qsort(tmp,pos,sizeof(tmp[0]),cmp);(tmp为数组)


原创粉丝点击