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; } } } }
希尔排序(Shell sort)的实现
猜你喜欢
转载自www.cnblogs.com/lhb666aboluo/p/12793765.html
今日推荐
周排行