今晚写MergeSort 比写QuickSort好了点 但是还是没有秒杀! 伤心。
只是记下这个需要注意的出错的地方:
数据结构:
template<typename T>struct SeqList
{
T* pData;
int iLength;
};
错误出在Merge函数中:
我出错的写法是:
template<typename T>void Merge(SeqList src, SeqList &dest, int seq1_start, int seq1_end, int seq2_end)
我的想法是src作为源数据,传参的时候是值传参,所以会复制整个结构体出来,这样就不会影响写入到原来的SeqList了(注意dest是一个引用)
但是我居然又遗漏了浅复制这个基本的概念。
因为我定义的结构体里面的Data是一个指针,所以复制的时候只会复制指针,而数据所在的内存区是不会复制的,也就是src和dest都指向同一个内存区。
看来使用指针一定要慎之又慎啊!!!