关于qsort的问题

alfamoon 2013-03-26 11:35:08
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void qs(int* v,int left,int right,int (*cmp)(void *,void*));
void swap(int* v,int i,int j);
int compare(void *l, void *r);
int main()
{
srand(time(NULL));
int* v=(int *)malloc(sizeof(int)*10);
int i;
printf("ok\n");
for(i=0;i<10;i++){
v[i]=rand()%10;
printf("%d\n",v[i]);
}
printf("ok\n");
qs(v,0,10,compare);
//qsort(v,10,sizeof(int),compare);
for(i=0;i<10;i++){
printf("\t%d\n",v[i]);
}
free(v);
return 0;
}
void swap(int* v,int i,int j){
int t;
t=v[i];
v[i]=v[j];
v[j]=t;
}
void qs(int* v,int left,int right,int (*cmp)(void *,void *)){
int last;
if(left==right){
return;
}
int i;
last=left;
swap(v,left,(left+right)/2);
for(i=left+1;i<right;i++){
if((*cmp)((void*)v[i],(void*)v[left])){
swap(v,i,++last);
}
}
swap(v,left,last);
qs(v,left,last,(*cmp));
qs(v,last+1,right,(*cmp));

}
int compare(void *l, void *r){
return *(int*)l - *(int*) r;
}

调试时候显示 compare错误??
不解求指点
谢谢

...全文
71 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
alfamoon 2013-03-26
  • 打赏
  • 举报
回复
恩 菜了,应该传dizhi
_sunshine 2013-03-26
  • 打赏
  • 举报
回复

for(i=left+1;i<right;i++){
		if((*cmp)((void*)(&v[i]),(void*)(&v[left]))){//这里传给compare的参数不对
			swap(v,i,++last);
		}
	}
alfamoon 2013-03-26
  • 打赏
  • 举报
回复
qs(v,0,10,compare);参数呢? 什么意思? 不是传compare指针吗?
未注销 2013-03-26
  • 打赏
  • 举报
回复
qs(v,0,10,compare);参数呢?

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧