出泡排序
通过跳过有序区间能把冒泡排序的时间复杂度降低到O(n^3/2)
冒泡排序的效率较低,但比较稳定。处理部分无序的集合时,可通过动态更新排序区间,跳过尾部有序部分,来较少无效操作,从而实现效率的提升。
代码实现:
/** 出泡排序 -- O(n^(3/2)) **/
template <typename T>
void Better_PopSort(vector<T> vec,size_t low,size_t high)
{
while(low<high){
size_t lowc=low,highc=high;/* 拷贝排序区间端点值用于迭代 */
while( ++lowc <highc ){
if(vec[low-1]>vec[low]){
Swap(vec[low-1],vec[low]);
size_t last = low;/* 标记无序区间末尾对应秩 */
}
}
high = last;/* 更新排序区间右端点秩 */
}
}
Swap:
template <typename T>
void Swap(T& varA,T& varB)
{
T vart=varA;
varA=varB;
varB=vart;
}