C++模板实现快速排序
2017-04-23 12:36
441 查看
快速排序是一种效率很高的排序算法,其基本思想是首先选取第一个位置做为哨兵,从最后位置开始依次向前搜索,搜索到第一个小于哨兵的元素,则进行位置交换,之后在从开始位置开始进行搜索,搜索到第一个大于哨兵的元素,则进行位置交换,如此往复,直到整个序列被遍历一遍,则完成一次快速排序.结果是,哨兵左边的元素都小于哨兵,哨兵右边的元素都大于哨兵.之后,使用分治法,对左右两个子序列再进行快速排序,最终达到整个序列的有序.
算法分析:
1.不稳定.
2.时间复杂度O(nlog(n))
3.空间复杂度O(nlog(n))
4.终止条件,对每一次快速排序,当low>=high时终止.
代码实现如下:
算法分析:
1.不稳定.
2.时间复杂度O(nlog(n))
3.空间复杂度O(nlog(n))
4.终止条件,对每一次快速排序,当low>=high时终止.
代码实现如下:
//Quicksort //1. Not Stable //2. Time complex O(nlog(n)) //3. Space complecity, O(nlog(n)) //4. In one time quick sort, when low>=high, stop template <typename T, unsigned int size> void Sort<T, size>::quickSort(int low, int high, T* const sortArray) { if (low >= high) { } else { int startLowIndex = low; int startHighIndex = high; //T dataFlag = sortArray[low]; while (low < high) { while ((low < high) && (sortArray[high] >= sortArray[low])) { loopTimes++; high--; } if (low >= high) { break; } else { T temp = sortArray[high]; sortArray[high] = sortArray[low]; sortArray[low] = temp; moveTimes++; low++; } while ((low < high) && (sortArray[low] <= sortArray[high])) { loopTimes++; low++; } if (low >= high) { break; } else { T temp = sortArray[low]; sortArray[low] = sortArray[high]; sortArray[high] = temp; moveTimes++; high--; } } //Be careful for low-1 and low+1, if forget the +1 or -1, will result dead loop quickSort(startLowIndex, low - 1, sortArray); quickSort(low + 1, startHighIndex, sortArray); } return; }
相关文章推荐
- 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 之移动语义和传导模板实现原理