希尔排序(Shell sort)的实现

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;
                    }
                }
            }
}

猜你喜欢

转载自www.cnblogs.com/lhb666aboluo/p/12793765.html