template<typename T>voidperc_down(vector<T>&vec,int i,int n){int child;
T tmp;for(tmp = std::move(vec[i]);2*i+1< n; i = child){
child =2*i+1;if(child != n-1&& vec[child]< vec[child +1])++child;if(tmp < vec[child])
vec[i]= std::move(vec[child]);elsebreak;}
vec[i]= std::move(tmp);}template<typename T>voidheap_sort(vector<T>&vec){for(int i = vec.size()/2-1; i >=0;--i){perc_down(vec, i, vec.size());}for(int i = vec.size()-1; i >0;--i){
std::swap(vec[0], vec[i]);perc_down(vec,0, i);}}
希尔排序
template<typename T>voidshell_sort(vector<T>&vec){for(int gap = vec.size()/2; gap >0; gap /=2){for(int i = gap; i < vec.size();++i){
T tmp = vec[i];int j = i;for(; j >= gap && vec[j-gap]> tmp; j -= gap)
vec[j]= std::move(vec[j-gap]);
vec[j]= std::move(tmp);}}}
插入排序
template<typename T>voidinsertion_sort(vector<T>&vec){for(int i =1; i < vec.size();++i){
T tmp = std::move(vec[i]);int j;for(j = i; j >0&& tmp < vec[j-1];--j)
vec[j]= std::move(vec[j-1]);
vec[j]= std::move(tmp);}}
Sort algorithm in C++快速排序template <typename T>const T& partition(vector<T> &vec, int left, int right){ int center = (left + right)/2; if(vec[center] < vec[left]) std::swap(vec[left], vec[center]); if(vec[right