C++模板实现梳排序
2017-04-20 20:52
786 查看
梳排序是一种改进的冒泡排序算法,通过比较元素彼此之间的步长位置这种方式先对数据进行预处理,在每次移动中,步长会越来越小,直至他等于1.这一理念就是在正式排序前先将一些大元素移动至数组的底部.之后正式排序采用冒泡排序算法来进行.
大量试验证明,步长缩短因子为1.3时,能达到较高的效率.梳排序的良好性能可与快速排序相媲美.
算法实现如下:
大量试验证明,步长缩短因子为1.3时,能达到较高的效率.梳排序的良好性能可与快速排序相媲美.
算法实现如下:
//Combsort //1. Stable //2. Time complex O(n2) //3. Space complecity, O(n2) //4. Terminate condition, for first stage, step become 1, for second stage, during one time compare, no change happens template<typename T> void Sort<T>::combSort(T* const sortArray, const unsigned int size) { //First stage unsigned int step = size / 1.3; while (step > 1) { for (unsigned int i = size - 1; i >= step; i--) { if (sortArray[i] < sortArray[i - step]) { T temp = sortArray[i]; sortArray[i] = sortArray[i - step]; sortArray[i - step] = temp; moveTimes++; } loopTimes++; } step = step / 1.3; } //Second stage bool hasSwap = false; for (unsigned int i = 0; i < size; i++) { hasSwap = false; for (unsigned int j = size - 1; j > i; j--) { loopTimes++; if (sortArray[j] < sortArray[j - 1]) { T temp = sortArray[j]; sortArray[j] = sortArray[j - 1]; sortArray[j - 1] = temp; hasSwap = true; moveTimes++; } } if (!hasSwap) { break; } } }
相关文章推荐
- C++模板实现梳排序
- C++模板实现梳排序
- C++模板实现梳排序
- c++ 模板实现 -- 直接插入排序和归并排序
- C++模板来实现一个通用的内存池.
- 用C++模板实现正则表达式
- C++模板实现事件处理器中的“通用成员函数指针”的调用(一)
- 我用c++实现的模板单链表类.并用一个一元多项式进行测试.
- dotNet中ArrayList的C++模板简单实现
- 使用C++模板实现不需要IDL的RPC【二】
- 使用C++模板实现不需要IDL的RPC【二】
- 利用C++模板,代替虚函数实现类的静态多态性
- 使用C++模板技术实现类的动态注册和获取
- C++ 学习练手 - 数组型队列的模板实现
- 利用C++模板,代替虚函数,实现类的静态多态性(加入性能测试部分)
- 利用C++模板,代替虚函数,实现类的静态多态性(加入性能测试部分)
- 在C++中利用模板实现 data variant(propery)
- C++ 学习练手 - 数组型栈的模板实现
- 用C++模板实现事件模型
- C++ 0x 之移动语义和传导模板实现原理