Merge_sort的优化...

帖出自己上次实验写的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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值