三九宝宝网宝宝教育教学论文

c语言如何用qsort排序

02月03日 编辑 39baobao.com

[学前班语言教案相反动作]一、设计意图 设计这节活动,意在让幼儿在相关物品中、生活中找找、想想、说说反义词。根据我班孩子在中班末期对反义词表现出比较浓厚的兴趣,并能说一些的特点。开学后,我在日...+阅读

试想一下,如果让你自己设计qsort函数,需要些什么东西,首地址要有吧,总共有几个元素要有吧,每个元素占多大的内存要有吧(想想就知道函数内部要根据内存块的大小交换数据实现排序),最后一个规则总要有吧,qsort的灵活性在于规则是活的不是死的,其实大多数语言的排序都是类似的机制啦。。。看下qsort的原型

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

base就是所谓的首地址,nelem就是元素个数,width,就是每个元素的大小,fcmp是一个函数指针,这里函数的定义要类似于int cmp(const void*a,const void*b),其实很多人不知道怎么使用qsort主要是在于对这个函数不懂得如何写,其实想想就知道函数把每个元素的地址扔给比较函数,根据比较函数的返回值来决定到底是a在前面还是b在前面,所以在函数里面要先取出值,所以一般的写法就是

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

{

return *(T*)a-*(T*)b;

}

先强制转换成T类型再用取值符号*取出指,函数之所以用空指针是因为空指针可以指向任何类型,对于基本类型,只要将T修改为基本类型就行了,对于结构体之类的的指针,则return ((T*)a)->x-((T*)b)->x;其中T就是结构体的名称,x就是你要比较的字段,当然如果你要降序的话就将ab颠倒就行了,说了这么多,写一个例子,比如要对下面的数组排序

int a[5]={2,10,5,4,0};

qsort(a,5,sizeof(int),cmp);

比较函数

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

{

return *(int*)a-*(int*)b;

}

。。呵呵,啰嗦了点。希望对你有帮助

以下为关联文档:

留学荷兰语言要求本科有哪些留学荷兰语言要求有哪些? 荷兰是学生们比较喜欢的欧洲国家之一,荷兰的教育质量在世界上的口碑都是极好的,虽然留学荷兰的入学条件越来越严格,但其低廉的学费和高质量的教育以及...

荷兰留学语言有哪些要求一、大专毕业生或大学在读学生可以申请哪些学校和专业? 1-2年制的本科课程是专为大专毕业生或大学在读学生开设的。有几所荷兰学校提供这样的课程,详情请见本年度本科招生信息...

美国留学各种语言成绩要求是多少一般来说新托福考试满分是120分,如果你考到80-90分只算是留学美国的及格分,有少部分学校对托福要求可能会在这个阶段。如果托福成绩在90以上就属于良好了,也符合大部分学校的录...

美国留学本科对语言的要求留学美国基本生活费一览拜托各位大神LZ,美国本科对语言的要求,跟你要申请的学校和专业相关,先给你列一下2015年美国大学TOP50托福录取要求,供楼主参考,希望会对楼主有所帮助。1.Princeton University普林斯顿大学本...

请你选择一件自己经历过的难忘的事写一写题目自拟要求语言通顺意思那天,我坐车去医院看望生病的外婆,路上遇到了一件最让我难忘的一件事。 也不知怎么回事,那天坐车的人特别多,我在人群中“挣扎”了很久,终于争取到了一个座位,两条象灌满铅一样的...

c语言快速排序qsort函数你这个是c程序还是c++ c++的话类型要求比较严格 比较函数接受的参数类型应该是const void* c的话你main里函数原型的声明也不对啊,这样改一下 #include<stdlib.h> #include<s...

C语言关于qsort的问题为什么不能排序你的cmp()函数的的参数类型不正确,qsort()函数要求cmp()函数的形参必须是const void*类型的,而不是int类型,修改如下: //-------------------------------------------------------...

C语言qsort函数对char型strmn数组的排序// 这样写就OK啦。 int cmp(const void *a, const void *b) { char *aa = (char *) a; char *bb = (char *) b; return strcmp(aa,bb); } // const void *a是表示一个指向co...

C语言中qsort函数怎么用qsort函数是编译器函数库自带的快速排序函数。qsort 的函数原型是:void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*)); 它的参数...

推荐阅读
图文推荐