- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C++笔记 2007 年 4 月 2 日
1、排序函数
void order(int* p1, int* p2){ if(*p1 *p2){
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
}
void sort (int *p , int len , int perLen , void (*pOrder)(void* , void*)){ char* pt = (char*)p;
for(int i = 0 ; i len ; i++){ for(int j = i ; j len ; i ++){
pOrder(pt+i*perLen , pt+j*perLen);
}
}
}
将输入参数int* - void* (void* 可以存储任何类型的地址,可以通用 )
表示数组的第i 个元素,事先要知道数组每个元素的大小(参数传入) i*perLen = 当不知道指针类型时,表示走一步,应越过的字节数p+i*perLen = 表示第i 个元素的地址
具体的数组要有具体的排序方法
调用函数,当不知道函数名时,可以通过函数指针调用
==================================================
sort.h
==================================================
void sort( void * p , int len , int perLen , void (*pOrder)(void * , void * ) );
==================================================
sort.cc
==================================================
void sort( void * p , int len , int perLen ,
void (*pOrder)(void * , void * ) ){
char* pt = (char*)p ;
for( int i = 0 ; i len ; i++ ){
for( int j = i ; j len ; j++ ){ pOrder(pt+i*perLen,pt+j*perLen ) ;
}
}
}
==================================================
main.cc
==================================================
#include iostream #include sort.h using namespace std;
void orderInt( void * p1 , void * p2 ){ int * t1 = (int*)p1 ;
int * t2 = (int*)p2 ; if( *t1 *t2 ){
int temp = *t1 ;
*t1 = *t2 ;
*t2 = temp ;
}
}
struct Person{
char name[ 40 ] ; int age ;
int id ;
} ;
void orderByAge( void * p1 , void* p2 ){ Person * t1 = (Person*)p1 ;
Person * t2 = (Person*)p2 ; if( t1-age t2-age ){
Person t = *t1 ;
*t1 = *t2 ;
*t2 = t ;
}
}
void orderById( void *p1 , void* p2 ){ Person* t1 = (Person*)p1 ; Person* t2 = (Person*)p2 ;
if( t1-id t2-id ){ Person t = *t1 ;
*t1 = *t2 ;
*t2 = t ;
}
}
void orderByName( void * p1 , void* p2 ){ Person* t1 = (Person*)p1 ;
Person* t2 = (Person*)p2 ;
if( strcmp( t1-name , t2-name ) 0 ){ Person t = *t1 ;
*t1 = *t2 ;
*t2 = t ;
}
}
int main(){
int ia[] = { 3,1,6,3,6,8,3,468,89 };
sort( ia , 9, sizeof(int), orderInt );
for( int i = 0 ; i 9 ; i++ ){ coutia[i] ;
}
co
文档评论(0)