关于排序算法的调用和性能
来源:互联网 发布:c语言折半查找法 编辑:程序博客网 时间:2024/05/21 08:41
排序算法是大家很常用的了,有很多种优秀的排序算法,其中快速排序,堆排序,归并排序是我个人认为最好的三种。就平均时间性能而言,快速排序是最快的。有时候调用排序算法如果比较慢的话,大多不是因为排序算法本身的原因,而是调用的方式。
排序算法内部要进行多次的数据交换,数据交换的效率往往决定着算法的时间效率。特别是当待排序的数据单元比较大的时候,数据交换的效率就很低了。为此,考虑用交换数据的指针来代替直接的数据交换,这样性能一般能大幅提升。下面的代码就实现了这个想法,其中的 QuickSort, HeapSort, MergeSort 分别对应快速排序,堆排序,归并排序,大家很容易找到实现代码。
template <typename T>
class TPnter{//基于指针交换的排序(适合排序对象比较大的情况: 比如sizeof(T)>16)
public:
T* pt;
public:
TPnter():pt(0){};
~TPnter(){};
bool operator < (const TPnter &to) const{
return (*pt < *to.pt);
};
bool operator <= (const TPnter &to) const{
return !(*to.pt < *pt);
};
bool operator > (const TPnter &to) const{
return (*to.pt < *pt );
};
bool operator >= (const TPnter &to) const{
return !(*pt < *to.pt);
};
bool operator == (const TPnter &to) const{
// return (!(*pt < *to.pt) && !(*to.pt < *pt));
return (*pt == *to.pt);
};
};
template<typename T>
void XSortPro(T** a, int N, int method=SORT_QUICK)
{// 2013.10.18
ASSERT(N>1 && sizeof(T)>7);
int k;
TPnter<T>* pTP= new TPnter<T>[N];
for(k=0; k<N; ++k)
pTP[k].pt= a[k];
switch(method){
case SORT_QUICK:
QuickSort(pTP,N);
break;
case SORT_HEAP:
HeapSort(pTP,N);
break;
default:
MergeSort(pTP,N);
break;
}
for(k=0; k<N; ++k)
a[k]= pTP[k].pt;
delete[] pTP;
return;
}
- 关于排序算法的调用和性能
- 排序算法的分类和性能比较
- 关于排序算法的一点知识——性能比较
- 关于数组的排序和查找算法
- 关于排序算法的理解和复述
- C#性能测试模板和洗牌的随机排序算法
- 常用排序算法的python实现和性能分析
- 各种排序算法的性能
- 排序算法的性能问题
- 排序算法的性能分析
- LUA 排序算法和性能分析[2]:冒泡排序算法
- LUA 排序算法和性能分析[3]:选择排序算法
- LUA 排序算法和性能分析[4]:快速排序算法
- LUA 排序算法和性能分析[5]:插入排序算法
- LUA 排序算法和性能分析[6]:归并排序算法
- 排序算法性能和使用场景总结
- 排序算法性能和使用场景总结
- 排序算法性能和使用场景总结
- 杂
- android flash 下载完整性检查
- 好久没写博客了
- 解决js无法提交表单并关闭窗口的简单方法
- Bootstrap下拉菜单
- 关于排序算法的调用和性能
- List和数组的转换方法
- Deep Learning 资料汇总
- android系统移植之文件系统分析
- 动态规划之 最大k乘积
- 考研(2)
- ARM架构kprobe应用及实现分析(11 原理)
- ActiveMQ 入门
- C语言中程序与数据的存储位置