读书人

关于qsort函数的有关问题

发布时间: 2012-03-17 19:06:27 作者: rapoo

关于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语言区吧
[解决办法]
好像没那么简单,呵呵.
[解决办法]
等待牛人来答.

读书人网 >C++

热点推荐