读书人

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

发布时间: 2012-03-01 10:25:47 作者: rapoo

堆排序问题!!!(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 时发生访问冲突!
这是什么原因/??

[解决办法]
编译没问题

读书人网 >软件架构设计

热点推荐