澳门新葡亰网址下载sort,qsort排序

by admin on 2020年1月28日

qsort()用法整理

对多个字符串排序,比较函数用strcmp写,如string数组存储的多个字符串

用 法: void qsort(void *base, int nelem, int width, int(*fcmp)(const
void *,const void *));

 

#include <cstdio>
#include <iostream>
#include <string>
#include <algorithm>
#include <cstring>
using namespace std;

string s[110];

bool cmp (string a, string b) { return a < b; }

int main () {
    int n;
    scanf ("%d", &n);
    for (int i = 0; i < n; i++) {
        cin >> s[i];
    }
    sort (s, s + n, cmp);
    for (int i = 0; i < n; i++) {
        cout << s[i] << endl;
    }
}

各参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小
4指向函数的指针

<排序都是采用的从小到大排序>

用C语言写

qsort
要求提供一个比较函数,是为了做到通用性更好一点
。比如你不仅仅的是要排序一个数字而已,可能你要用来
排序几个数字 ,比如有一个结构struct num { int a; int b; };
然后我有一个num 类型的数组, num dddd[100];
我想给dddd这个数组排序,那怎么办? 我想让 a +b
最大的num元素排在数组的最前面,那又怎么办?
这都可以通过定义比较函数来做到的。比较函数的作用就是给qsort指明
元素的大小是怎么比较的。 像这样的比较函数 inline int MyCmp(constvoid*
a, const void* b) 都是有两个元素 作为参数,返回一个int 值,
如果比较函数返回大于0,qsort就认为 a>b , 如果比较函数返回等于0
qsort就认为a 和b 这两个元素相等,返回小于零qsort就认为
a<本文中排序都是采用的从小到大排序>

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

#include <iostream>
#include <stdlib.h>
#include <cstdio>
#include <cstring>
using namespace std;

char str1[120][120];
int cmp(const void *a,const void *b)
{
    return strcmp((char*)a,(char *)b);
}

int main()
{
    int k=0;
    while(gets(str1[k]),strcmp(str1[k],"XXXXXX"))
    {
        k++;
    }
    qsort(str1,k,sizeof(str1[0]),cmp);
    for(int i=0;i<k;i++)
    {
       cout<<str1[i];
    }
    return 0;
}

一、对int类型数组排序

一、对int类型数组排序

存储多个字符串的方式:

int num[100];

int num[100];

1.二维数组str1[105][105],str[105][j]表示不同字符串

Sample: int cmp ( const void *a , const void *b )

Sample:

2.string[105],每个string[i]存储一个字符串

{ return*(int *)a – *(int *)b;}

int cmp ( const void *a , const void *b )
{
return *(int *)a – *(int *)b;
}

3.struct In
{
int data;
char str[100];
}s[100];
每个s[i]存储一个字符串。

qsort(num,100,sizeof(num[0]),cmp);

qsort(num,100,sizeof(num[0]),cmp);

下面附高手qsort排序全部用法:

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

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

七种qsort排序方法

char word[100];

char word[100];

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

Sample: int cmp( const void *a , const void *b )

Sample:

一、对int类型数组排序

{ return*(char *)a – *(int *)b;}

int cmp( const void *a , const void *b )
{
return *(char *)a – *(int *)b;
}

int num[100];

qsort(word,100,sizeof(word[0]),cmp);

qsort(word,100,sizeof(word[0]澳门新葡亰网址下载,),cmp);

Sample:

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

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

int cmp ( const void *a , const void *b )
{
return *(int *)a – *(int *)b;
}

double in[100];

double arry[100];

qsort(num,100,sizeof(num[0]),cmp);

int cmp( const void *a , const void *b )

int cmp( const void *a , const void *b )
{
return *(double *)a > *(double *)b ? 1 : -1;
}

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

{ return*(double *)a > *(double *)b ? 1 :-1;}

qsort(arry,100,sizeof(arry[0]),cmp);

char word[100];

qsort(in,100,sizeof(in[0]),cmp);

四、对结构体一级排序

Sample:

四、对结构体一级排序

struct In
{
double data;
int other;
}s[100];

int cmp( const void *a , const void *b )
{
return *(char *)a – *(int *)b;
}

struct In { double data; int other; }s[100]

//按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可以很多种

qsort(word,100,sizeof(word[0]),cmp);

//按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可以很多种,

int cmp( const void *a ,const void *b)
{
struct In *c=(In *)a;
struct In *d=(In *)b;
return c->data > d->data ? 1 : -1;
}

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

//参考上面的例子写

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

double in[100];

int cmp( const void *a ,const void *b)

五、对结构体二级排序

int cmp( const void *a , const void *b )
{
return *(double *)a > *(double *)b ? 1 : -1;
}

{ return (*(In *)a).data > (*(In *)b).data ? 1: -1; }

struct In
{
int x;
int y;
}s[100];

qsort(in,100,sizeof(in[0]),cmp);

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

//按照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;
}

struct In
{
double data;
int other;
}s[100]

struct In { int x; int y; }s[100];

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

//按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可以很多种,参考上面的例子写

//按照x从小到大排序,当x相等时按照y从大到小排序

六、对字符串进行排序

int cmp( const void *a ,const void *b)
{
return (*(In *)a).data > (*(In *)b).data ? 1 : -1;
}

int cmp( const void *a , const void *b)

struct In
{
int data;
char str[100];
}s[100];

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

{

//按照结构体中字符串str的字典顺序排序

五、对结构体二级排序

struct In *c = (In *)a; struct In *d = (In*)b;

int cmp ( const void *a , const void *b )
{
struct In *c = ( In *)a;
struct In *d = (In *)b;
return strcmp( c->str , d->str );
}

struct In
{
int x;
int y;
}s[100];

if(c->x != d->x)

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

//按照x从小到大排序,当x相等时按照y从大到小排序

return c->x – d->x;

七、计算几何中求凸包的cmp

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;
}

else

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;
}

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

return d->y – c->y;

对结构体三级排序(都是从小到大)

}

#include<stdlib.h>

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

typedef struct  item
{
    int num,length,width;
};

六、对字符串进行排序

int comp(const void *p1,const void *p2)
{
    struct item *c=(item*)p1;
    struct item *d=(item*)p2;
    if(c->num!=d->num)
    {
        return d->num<c->num?1:-1;
    }
    else if(c->length!=d->length&&c->num==d->num)
    return d->length<c->length?1:-1;
    else return d->width<c->width?1:-1;
}

struct In { int data; char str[100]; }s[100];

item ss[1200];

//按照结构体中字符串str的字典顺序排序

qsort(ss,n,sizeof(ss[0]),comp);

int cmp ( const void *a , const void *b )

六、对字符串进行排序

{

struct In
{
int data;
char str[100];
}s[100];

return strcmp( (*(In *)a)->str , (*(In *)b)->str);

//按照结构体中字符串str的字典顺序排序

}

int cmp ( const void *a , const void *b )
{
return strcmp( (*(In *)a)->str , (*(In *)b)->str );
}

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

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

七、计算几何中求凸包的cmp

七、计算几何中求凸包的cmp

int cmp(const void *a,const void *b)

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;
}

//重点cmp函数,把除了1点外的所有点,旋转角度排序

PS:

{

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

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)
x,d->y,p[1].x,p[1].y))

//如果在一条直线上,则把远的放在前面

return 1;

else return -1;

}

PS: 其中的qsort函数包含在的头文件里,strcmp包含在的头文件里

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图