qsort及其用法Word下载.docx
- 文档编号:16799928
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:20
- 大小:18.86KB
qsort及其用法Word下载.docx
《qsort及其用法Word下载.docx》由会员分享,可在线阅读,更多相关《qsort及其用法Word下载.docx(20页珍藏版)》请在冰豆网上搜索。
qsort(in,100,sizeof(in[0]),cmp);
4、对结构体一级排序
structIn
doubledata;
intother;
}s[100]
//按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可以很多种,参考上面的例子写
intcmp(constvoid*a,constvoid*b)
return(*(In*)a)->
data>
(*(In*)b)->
data?
qsort(s,100,sizeof(s[0]),cmp);
5、对结构体二级排序
intx;
inty;
}s[100];
//按照x从小到大排序,当x相等时按照y从大到小排序
structIn*c=(In*)a;
structIn*d=(In*)b;
if(c->
x!
=d->
x)returnc->
x-d->
x;
elsereturnd->
y-c->
y;
6、对字符串进行排序
intdata;
charstr[100];
//按照结构体中字符串str的字典顺序排序
returnstrcmp((*(In*)a)->
str,(*(In*)b)->
str);
自己写一个纯字符串的:
(temp是二维的字符串数组,j是一共需排序的字符串个数)
intcmpstr(constvoid*a,constvoid*b)
returnstrcmp((char*)a,(char*)b);
qsort(temp,j,sizeof(temp[0]),cmpstr);
7、计算几何中求凸包的cmp
intcmp(constvoid*a,constvoid*b)//重点cmp函数,把除了1点外的所有点,旋转角度排序
structpoint*c=(point*)a;
structpoint*d=(point*)b;
if(calc(*c,*d,p[1])<
0)return1;
elseif(!
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))//如果在一条直线上,则把远的放在前面
return1;
elsereturn-1;
qsort()是c程序库stdlib.h中的一个函数,需要比较函数完成排序;
sort()是STL中的标准算法。
#include<
stdlib.h>
intcmp(constvoid*a,constvoid*b)
return*((int*)b)-*((int*)a);
.
qsort(q,n,sizeof(int),cmp);
qsort对一维数组和字符串数组的排序:
#include"
stdio.h"
stdlib.h"
inta[100];
intcmp(constvoid*p,constvoid*q)
return(*(int*)p)-*((int*)q);
intmain()
intn;
scanf("
%d"
&
n);
for(inti=0;
i<
n;
i++)
a[i]);
qsort((void*)a,n,sizeof(a[0]),cmp);
printf("
%d\n"
a[i]);
//while
(1);
returnstrcmp((char*)p,(char*)q);
intmain()return0;
string.h"
chara[20005][25];
intn,m,i,j;
while
(1)
{
%d%d"
n,&
m);
if(n==0&
m==0)break;
for(i=0;
%s"
}
%s\n"
strtok(字符串拆分)说明
首次完成对字符串分割后,分隔符会被变成空格,此时如果将第一个参数置NULL即会按顺序返回每个子字符串,每调用一次返回一个,所以token会改变。
当后面不再有子字符串了,就会返回NULL
首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。
strtok在s中查找包含在delim中的字符并用NULL('
'
)来替换,直到找遍整个字符串。
char*p=strtok(s,"
;
"
);
p=strtok(null,"
在调用的过程中,字串s被改变了,这点是要注意的。
1029IgnatiusandthePrincessIV
输入
5
13233
11
11111555555
7
1111111
输出
3
1
实现
stdio.h>
intmain()
longn,num,cnt,res;
while(EOF!
=scanf("
n))
cnt=0;
//用于判断数字是否出现一半以上
while(n--)
num);
if(0==cnt)
res=num;
cnt++;
else
if(res==num)
cnt--;
res);
return0;
1040aseasyasA+B
2
3213
9147258369
123
123456789
iostream>
main()
intx;
//要对x组数据进行排序
intp;
//对多少个数进行排序
inta[1000];
//排序用的数组
inti,j,n;
//循环条件
x);
{
p);
for(j=0;
j<
p;
j++)
a[j]);
qsort(a,p,sizeof(int),cmp);
a[0]);
for(n=1;
n<
n++)
%d"
a[n]);
}
\n"
system("
pause"
1106排序
0051231232050775
07712312320
#include<
charc[1000];
//要处理的字符串
inti,j,m;
//处理后的数据存放的位置
intb=0;
char*p;
while(scanf("
c)!
=EOF)
i=0;
j=0;
p=strtok(c,"
5"
while(NULL!
=p)
a[j++]=atoi(p);
//把字符串转换成整形
p=strtok(NULL,"
qsort(a,j,sizeof(int),cmp);
for(m=1;
m<
j;
m++)
a[m]);
1236排名
4525
1010121315
CS0043513
CS003524135
CS002212
CS0013235
1240
1030
CS00112
2320
101010
CS0000000000000000010
CS000000000000000002212
CS00360
CS00137
CS00437
CS00000000000000000220
string.h>
structstudent
unsignedinta;
//分数
charc[21];
//学号
};
intcmp(constvoid*x,constvoid*y)
structstudent*m=(structstudent*)x;
structstudent*n=(structstudent*)y;
if(m->
a!
=n->
a)returnn->
a-m->
a;
elsereturnstrcmp(m->
c,n->
c);
structstudentstu[999];
//学生信息
unsignedintb[10];
charch[21];
unsignedintM,N,G;
//N考生人数,M考题数,G分数线
unsignedintm,g;
intj,i,r;
ints;
%u"
N),N!
=0)
%u%u"
M,&
G);
M;
i++)//录入没提的分数值
b[i]);
r=0;
//过线人数
N;
%s%u"
ch,&
//录入学号,和作对题数
s=0;
m;
g);
//输入作对的题号
s+=b[g-1];
//计算分值
if(s>
=G)
strcpy(stu[r].c,ch);
//将过线人的学号录入结构体注:
strcpy给字符串赋值
stu[r].a=s;
//将过线人的成绩录入结构体
r++;
qsort(stu,r,sizeof(stu[0]),cmp);
r);
r;
%s%u\n"
stu[i].c,stu[i].a);
return0;
1412{A}+{B}
输入
12
23
inta[20000];
intm,n,i,j,tem;
m)!
=EOF)//n为第一个集合元素个数,m为第二个元素铬数
tem);
//中间变量,用于去除重复值
if(tem==a[i])
break;
if(i==n)//元素不重复,将值录入到数组a中
a[n]=tem;
n++;
qsort(a,n,sizeof(int),cmp);
为了使输出格式复合要求
for(i=1;
1280前m大的数
44
1234
45
5364
7655
1110998
inta[3000];
intb[1001];
inti,j,r=0,v;
intm,n;
%d%d"
for(j=i;
if(i!
=j)
x=a[i]+a[j];
//计算任意两数的和
if(r==0)
b[r]=x;
for(v=r-1;
v>
=0;
v--)//求出前m大的数
if(x>
b[v])
b[v+1]=b[v];
b[v+1]=x;
if(v==0)
b[v]=x;
if(r<
m)
//前r大的数
b[0]);
b[i]);
2673
12345
51423
intcmp1(constvoid*a,constvoid*b)
intcmp2(constvoid*a,constvoid*b)
return*(int*)b-*(int*)a;
inta[10001];
intb[10001];
x)!
inti,j,v,r=0,tem;
b[i]=a[i];
qsort(a,x,sizeof(int),cmp2);
qsort(b,x,sizeof(int),cmp1);
if(x%2==0)
x/2;
i++)//当要处理的数是偶数时
else//当处理的数是奇数时
a[x/2]);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- qsort 及其 用法