- using CFT=int(const void*, const void*);
- void ssort(void* base, size_t n, size_t sz, CFT cmp)
- /*
- 使用 "cmp" 所指的比较函数把向量 "base" 的 "n" 个元素按照升序排列,
- 元素的大小是 "sz".
- */
- {
- for(int gap=n/2;gap>0;gap/=2)
- for(int i=gap;i!=n;++i)
- for(int j=i-gap;j>=0;j-=gap){
- char* b = static_cast<char*>(base); // 必要的类型转换
- char* pj = b + j*sz; //&base[j]
- char* pjg = b + (j+gap)*sz; //&base[j+gap]
- if(cmp(pjg,pj)<0){ // 交换 base[j]和 base[j+gap]:
- for(int k=0;k!=sz;k++){
- char temp = pj[k];
- pj[k] = pjg[k];
- pjg[k] = temp;
- }
- }
- }
- }
来源: http://www.bubuko.com/infodetail-3525777.html