关于qsort函数的问题
#include<iostream.h>
#include<stdlib.h>
#include<string.h>
int compare(const int *a,const int *b);
int list[10]={12,32,42,51,8,16,51,21,19,9};
void main()
{ qsort(list,10,sizeof(list[6]),compare);
for(int i=0;i<10;i++)
cout<<list[i]<<endl;
}
int compare( int a,int b)//参数是两个空类型常量指针
{
if((a/10+a%10)>(b/10+b%10))
return 1;
else
if((a/10+a%10)<(b/10+b%10))
return -1;
else return 0;
}帮帮忙帮我改下
[解决办法]
- C/C++ code
#include <iostream.h> #include <stdlib.h> #include <string.h> int compare(const void *a,const void *b); int list[10]={12,32,42,51,8,16,51,21,19,9}; void main() { qsort(list,10,sizeof(list[6]),compare); for(int i=0;i <10;i++) cout <<list[i] <<endl; } int compare( const void* _a,const void* _b)//参数是两个空类型常量指针 { int a = *(int*)_a; int b = *(int*)_b; if((a/10+a%10)>(b/10+b%10)) return 1; else if((a/10+a%10) <(b/10+b%10)) return -1; else return 0; }211232514251168919Press any key to continue
[解决办法]
把
int compare( int a,int b)//参数是两个空类型常量指针
{
改成
int compare( const void* p, const void* q )//参数是两个空类型常量指针
{
int a=*(const int*)p;
int b=*(const int*)q;
应该就行了。
[解决办法]
- C/C++ code
#include <iostream> #include <stdlib.h> #include <string.h> using namespace std;int compare(const void *a,const void *b); int list[10]={12,32,42,51,8,16,51,21,19,9}; void main() { //从小到大 qsort(list,10,sizeof(int),compare); for(int i=0;i <10;i++) cout <<list[i] <<endl; } int compare( const void *a,const void *b)//参数是两个空类型常量指针 { int *a1 = (int *)a; int *b1 = (int *)b; if((*a1/10+*a1%10) != (*b1/10+*b1%10)) return (*a1/10+*a1%10) - (*b1/10+*b1%10); return *a1/10 - *b1/10; //如果个位与十位的和相等,按十位排序}
[解决办法]
[code=C/C++][/code]#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
using namespace std;
int compare(const void *a,const void *b);
int list[10]={12,32,42,51,8,16,51,21,19,9};
int main()
{
qsort(list,10,sizeof(list[6]),compare);
for(int i=0;i <10;i++)
cout <<list[i] <<endl;
getchar();
return 0;
}
int compare( const void* _a,const void* _b)//参数是两个空类型常量指针
{
int a = *(int*)_a;
int b = *(int*)_b;
if((a/10+a%10)>(b/10+b%10))
return 1;
else if((a/10+a%10) <(b/10+b%10))
return -1;
else return 0;
}
[解决办法]
#include <iostream.h>
#include <stdlib.h>
#include <string.h>
int compare(const void*, const void*);
int list[10]={12,32,42,51,8,16,51,21,19,9};
void main()
{
qsort(list,10,sizeof(list[6]),compare);
for(int i=0;i <10;i++)
cout <<list[i] <<endl;
}
int compare(const void* ptr1, const void* ptr2)
{
return *(static_cast<const int*>(ptr1)) - *(static_cast<const int*>(ptr2));
}
/*
8
9
12
16
19
21
32
42
51
52
*/
[解决办法]
- C/C++ code
注意qsort的原型即可:void qsort ( void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) );/* qsort example */#include <stdio.h>#include <stdlib.h>int values[] = { 40, 10, 100, 90, 20, 25 };int compare (const void * a, const void * b){ return ( *(int*)a - *(int*)b );}int main (){ int n; qsort (values, 6, sizeof(int), compare); for (n=0; n<6; n++) printf ("%d ",values[n]); return 0;}
[解决办法]
http://blog.sina.com.cn/s/blog_4a443fd70100073b.html
看这里
话说这帖子该放在C语言区吧
[解决办法]
好像没那么简单,呵呵.
[解决办法]
等待牛人来答.