C语言中qsort函数怎么用?
我想知道C语言中qsort函数怎么用,看了网上其他答案,太复杂,表示不懂。所以想再问一哈,比如说我想对数组a[]={1,2,3,4,5,6};排序,想要一个具体的c语言代...
我想知道C语言中qsort函数怎么用,看了网上其他答案,太复杂,表示不懂。所以想再问一哈,比如说我想对数组a[ ]={1,2,3,4,5,6};排序,想要一个具体的c语言代码,附加说明,越简单越好,但必须用qsort。
展开
4个回答
展开全部
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
实例:
#include<stdio.h>
#include<stdlib.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(;i<n;i++)
{
scanf("%d",(array+i));
}
qsort(array,n,sizeof(int),comp);
for(i=0;i<n;i++)
{
printf("%d\t",array[i]);
}
return0;
}
qsort 的函数原型是:
void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));
它的参数为: 1 待排序数组首地址
2 数组中待排序元素数量
3 各元素的占用空间大小
4 指向函数的指针,用于确定排序的顺序
它在使用的时候需要包含头文件:stdlib.h
实例:
#include<stdio.h>
#include<stdlib.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(;i<n;i++)
{
scanf("%d",(array+i));
}
qsort(array,n,sizeof(int),comp);
for(i=0;i<n;i++)
{
printf("%d\t",array[i]);
}
return0;
}
展开全部
#include<stdio.h>
#include<stdlib.h>
int cmp(const void*a,const void*b) // 排序规则(按降序排)
{
return *(int*)b-*(int*)a;
}
int main()
{
int a[]={1,2,3,4,5,6};
qsort(a,6,sizeof(int),cmp); // a是被排序的数组 6是排序元素的个数 sizeof(int)是每个元素所占的字节数 cmp是排序规则
for(int i=0;i<6;i++) //输出
printf("%d ",&a[i]);
return 0;
}
#include<stdlib.h>
int cmp(const void*a,const void*b) // 排序规则(按降序排)
{
return *(int*)b-*(int*)a;
}
int main()
{
int a[]={1,2,3,4,5,6};
qsort(a,6,sizeof(int),cmp); // a是被排序的数组 6是排序元素的个数 sizeof(int)是每个元素所占的字节数 cmp是排序规则
for(int i=0;i<6;i++) //输出
printf("%d ",&a[i]);
return 0;
}
追问
我用的VC编译,发现你的程序得出的结果不是比较的结果啊。你再试试,我能看懂你的程序,你调试一下。
追答
#include
#include
int cmp(const void*a,const void*b) // 排序规则(按降序排)
{
return *(int*)b-*(int*)a;
}
int main()
{
int a[6]={1,2,3,4,5,6},i;
qsort(a,6,sizeof(int),cmp); // a是被排序的数组 6是排序元素的个数 sizeof(int)是每个元素所占的字节数 cmp是排序规则
for(i=0;i<6;i++) //输出
printf("%d ",a[i]);
return 0;
}
好了 多加了个& 直接打的没编译过 不好意思
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
typedef int* ipfun(int *a,int *b);//用qsort一般最好写成typedef int* ipfun(const int *a,const int *b);
int paixu(int *a,int *b)//int paixu(const int *a,const int *b)//
{
if(*a<*b)return -1;
else if(*a>*b)return 1;
else
return 0;
}
int main()
{
int i,a[8]={1,2,3,4,5,7,6,8,};
qsort(a,8,sizeof(int),paixu);//第一个是要操作的数组,第二个是要操作的数组的大小,第三个是要操作的数组的类型长度,第四个是一个函数指针。
for(i=0;i<8;i++)
{
printf("%4d",a[i]);
}
printf("\n");
}
typedef int* ipfun(int *a,int *b);//用qsort一般最好写成typedef int* ipfun(const int *a,const int *b);
int paixu(int *a,int *b)//int paixu(const int *a,const int *b)//
{
if(*a<*b)return -1;
else if(*a>*b)return 1;
else
return 0;
}
int main()
{
int i,a[8]={1,2,3,4,5,7,6,8,};
qsort(a,8,sizeof(int),paixu);//第一个是要操作的数组,第二个是要操作的数组的大小,第三个是要操作的数组的类型长度,第四个是一个函数指针。
for(i=0;i<8;i++)
{
printf("%4d",a[i]);
}
printf("\n");
}
追问
我用VC编译不过啊
追答
哪错了?
我编译通过了啊,要学会调试噻
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为排序的关键是对要排序的数据两两比较大小,比较大小的不同决定了排序依据的不同,传入不同的函数指针,实现不同的大小比较就能改变排序顺序。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询