首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

堆排序有关问题!(C++)

2012-03-01 
堆排序问题!!!(C++)emplateclassTstructNode{Tkey//keywordusedtosortTinfo//otherinformations}temp

堆排序问题!!!(C++)
emplate   <class   T>
struct   Node{

T   key;                                   //key   word   used   to   sort
T   info;                                 //other   informations
};

template   <class   T>
class   Data{    
Node <T>   *arr;
int   number;
public:
Data(int);
void   MAX_HEAPIFY(Node <T>   *,int);        
void   BUILD_MAX_HEAP(Node <T>   *);
void   HEAP_MAX_SORT();
void   print()const;
~Data();
};//这是类的声明!
//下面是类的定义
template <class   T>
Data <T> ::Data(int   n){
arr=(Node <T>   *)malloc(sizeof(Node <T> )*n);
number=n;
srand((unsigned)time(NULL));

for(int   i=0;i <number;++i)
{
arr[i].key=(T)rand();       //rand()%(end-begin+1)+begin;  
}
}  

  template   <class   T>
  void   Data <T> ::MAX_HEAPIFY(Node <T>   *A,int   i){
  int   left=2*i;
  int   right=2*i+1;
  int   largest;
  if(left <=number   &&   A[left].key> A[i].key)
  largest=left;
  else
  largest=i;
  if(right <=number   &&   A[right].key> A[i].key)
  largest=right;
  else
  largest=i;
  if(largest!=i)
  {
  Node <T>   convert;
  convert=A[i];
  A[i]=A[largest];
  A[largest]=convert;

  MAX_HEAPIFY(A,largest);
  }
  }

  template   <class   T>
  void   Data <T> ::BUILD_MAX_HEAP(Node <T>   *A){
  for(int   i=number/2;i> =0;i--)
  MAX_HEAPIFY(A,i);
  }

  template   <class   T>
  void   Data <T> ::HEAP_MAX_SORT(){
  BUILD_MAX_HEAP(arr);
  for(int   i=number;i> =1;--i)
  {
  Node <T>   convert;
  convert=arr[1];
  arr[1]=arr[i];
  arr[i]=convert;
  number--;
  MAX_HEAPIFY(arr,1);
  }
  }

template <class   T>
Data <T> ::~Data(){

delete   arr;
}
template <class   T>
void   Data <T> ::print()   const{
Node <T> *   iterator=arr;
for(;iterator;iterator++)
cout < <iterator-> key < < "   ";
cout < <endl;
}

#endif
总是出现:temp.exe   中的   0x004122b6   处最可能的异常:   0xC0000005:   读取位置   0x003a7000   时发生访问冲突
temp.exe   中的   0x004122b6   处未处理的异常:   0xC0000005:   读取位置   0x003a7000   时发生访问冲突!
这是什么原因/??

[解决办法]
编译没问题

热点排行