关于排序算法的调用和性能

原创 2013年12月03日 22:27:47

 排序算法是大家很常用的了,有很多种优秀的排序算法,其中快速排序,堆排序,归并排序是我个人认为最好的三种。就平均时间性能而言,快速排序是最快的。有时候调用排序算法如果比较慢的话,大多不是因为排序算法本身的原因,而是调用的方式。


排序算法内部要进行多次的数据交换,数据交换的效率往往决定着算法的时间效率。特别是当待排序的数据单元比较大的时候,数据交换的效率就很低了。为此,考虑用交换数据的指针来代替直接的数据交换,这样性能一般能大幅提升。下面的代码就实现了这个想法,其中的 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;



详解五大排序算法

为什么要学习排序 一旦建立一个重要的数据库后,就可能根据某些需求对数据进行不同方式的排序: 比如闹钟功能,按时间远近排序出 闹钟列表,联系人列表按字母A-Z排序,城市列表按省市县的类别排序等等...

八大排序算法

概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。   ...
  • hguisu
  • hguisu
  • 2012年07月23日 16:45
  • 811021

常见排序算法的实现与性能比较

  • 2011年03月12日 21:30
  • 16KB
  • 下载

第十六周项目2-大数据集上排序算法性能的体验

问题及代码: /* * Copyright (c)2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:ccc.cpp * 作 者:陈梦雪 ...

排序算法性能比较

  • 2007年07月05日 00:19
  • 241KB
  • 下载

数据结构实验4(排序算法的实现及性能分析)

实现了选择排序, 插入排序, 冒泡排序, 快速排序, 改进后的快速排序, 以及两路合并排序. 通过随机函数随机生成100个数, 进行各种排序, 记录排序开始时间以及结束时间, 计算消耗的时间来比较算...
  • GKHack
  • GKHack
  • 2015年12月16日 21:22
  • 2430

自动测试排序算法性能work5

  • 2012年12月02日 12:03
  • 23KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于排序算法的调用和性能
举报原因:
原因补充:

(最多只允许输入30个字)