首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于qsort的有关问题

2013-03-28 
关于qsort的问题#include stdio.h#include stdlib.h#include time.hvoid qs(int* v,int left,int ri

关于qsort的问题

#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错误??
不解求指点
谢谢


[解决办法]
qs(v,0,10,compare);参数呢?

[解决办法]

for(i=left+1;i<right;i++){
if((*cmp)((void*)(&v[i]),(void*)(&v[left]))){//这里传给compare的参数不对
swap(v,i,++last);
}
}

热点排行