帖出自己上次实验写的merge的非递归算法哈... 最近也不知道在忙什么.. 好久没来这里了`~ 呵...
哎~ 有点想快点放假好了~` 好多东西要学 ~` 想放假了就可以自由的开始看自己的东西了....
最近有点小好奇... 自己心里的哲学是什么样的.. 没找到答案 ... 早就不在乖乖的 看书了... 呵...
突然觉得有些东西.. 做不好的话.. 是因为背弃了一种信仰的缘故?? 存在于事情的信仰...
[| 废话完后是... 下面函数的 merge部分是用了另外的辅助空间... 本来想用插入排序的.. 结果测试的结果发现很
不理想... 采用插入虽然节省了空间... 但是时间上扬了2倍接近... ~~`
另外小好奇... 做排序实验的时候 ... 看到网上有人评价排序实验的时候.. 曾提到正序和逆序的情况... ~
我做实验的时候.. 数据是直接用随机数生成器做的哈.. [ps: 本来想随便用个文件来读2进制的`~~] 也正因为如此...
在快速排序的时候 .. 随机版的partition总跑的比1/2版本的partition慢... [看过 arya 的STL内观排序后.. 觉得该换种]
template < typename Record >
int Sortable_list < Record > ::original_merge( int test_length)
... {
test_length++;
p_data = new int [test_length/2 + 1];
for (int i = 0; i < test_length/2; i++)
...{
p_data[i] = 2 * i;
}
p_data[i] = length;
return i;
}
template < typename Record >
void Sortable_list < Record > ::reset( int & sub_num)
{
if (sub_num == 1)
...{
sub_num = 0;
return ;
}
sub_num++;
for (int i = 1, j = 2; i <= sub_num/2; i++)
...{
p_data[i] *= 2;
}
p_data[i-1] = length;
sub_num /= 2;
}
template < typename Record >
void Sortable_list < Record > ::no_recur_merge(Record * write,Record * read, int head, int tail)
{
int sub_num = original_merge(length);
int i;
while (sub_num >= 1)
...{
for (i=0;i<sub_num;i++)
. {
merge(test_array,test_for_merge,p_data[i],(p_data[i]+p_data[i+1])/2,p_data[i+1]-1);
}
reset(sub_num);
}
delete [] p_data;
}