关于c语言qsort函数降序的信息

c语言如何用qsort排序

试想一下,如果让你自己设计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;

}

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

c语言中合并两个降序数组,使合并后的数组仍然保持降序排列

#includestdio.h

#includestdlib.h

#define N 100

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

{//快速排序比较函数

int *x=(int*)a;

int *y=(int*)b;

return *y-*x;

}

int main()

{

int a[N]={9,7,5,3,1};

int b[N]={8,6,4,2,0};

int sum[2*N]={0};//合并数组

int k=0;//合并数组元素个数的计数

for(int i=0;i5;i++)

{

sum[k++]=a[i];//a数组元素赋值给sum数组

}

for(int i=0;i5;i++)

{

sum[k++]=b[i];//b数组元素赋值给sum数组

}

qsort(sum,10,sizeof(sum[0]),cmp);//降序排序

for(int i=0;ik;i++)//输出

printf("%d ",sum[i]);

return 0;

}

【C语言】如果想用qsort这样的系统自带函数给一个二维数组的某一横行排序怎么做?

qsort是编译器函数库自带的快速排序函数。其原型为:

void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));

参数含义如下:

base: 待排序数组首地址。

num: 数组中待排序元素数量。

width: 各元素的占用空间大小。

compare: 指向函数的指针,用于确定排序的顺序。

比较难以理解的是compare函数指针,其确定了如何去排序,通过修改该函数指针指向的函数体,可以对复杂类型进行排序,如结构体等。 也可以改变排序方式,如升序或降序。

要达到问题中的效果,需要在第一个参数传入数据所在行的首地址,第二个参数传入一行中元素的个数,第三行传入每个元素占用的空间,第四个传入自定义的比较函数指针(函数名)。

下面就以一个3行4列整型数组a[3][4],对其第二行(a[1])进行升序排序为例,写一个代码,辅助理解。

#include stdio.h

#include stdlib.h

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

{

return *((int *)a)  *((int *)b);//由于是整型数组,所以将指针转为整型指针后取值,再比较。

}

int main()

{

int a[3][4] = 

{

5,1,54,6,

22,12,44,32,

34,5,2,1

};//定义的原始数组,可以看到是乱序的。

int i,j;

qsort(a[1], 4, sizeof(int), cmp);

//以下代码输出数组元素值,以验证排序结果。

for(i = 0; i  3; i ++)

{

for(j = 0; j  4; j ++)

printf("%3d",a[i][j]);

printf("\n");

}

return 0;

}

程序运行后输出:

5  1 54  6

12 22 32 44

34  5  2  1

可以看到第二行已经升序排列,而其它两个没有变化。

C语言中qsort函数怎么用?

qsort函数是编译器函数库自带的快速排序函数。

qsort 的函数原型是:

void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));

它的参数为: 1 待排序数组首地址

2 数组中待排序元素数量

3 各元素的占用空间大小

4 指向函数的指针,用于确定排序的顺序

它在使用的时候需要包含头文件:stdlib.h

实例:

#includestdio.h

#includestdlib.h

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

{

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

}

int main()

{

int *array;

int n;

scanf("%d",n);

array=(int*)malloc(n*sizeof(int));

int i=0;

for(;in;i++)

{

scanf("%d",(array+i));

}

qsort(array,n,sizeof(int),comp);

for(i=0;in;i++)

{

printf("%d\t",array[i]);

}

return0;

}


网站标题:关于c语言qsort函数降序的信息
浏览地址:http://scyanting.com/article/dodcgpp.html