24小时热门版块排行榜    

查看: 1017  |  回复: 13

cw277

木虫 (正式写手)

[求助] 求程序优化

(主要是怎么实现函数快速地插入操作)
int * insert(int s[], int t3,int t1,int t2)
{
        int *b,i;
    b = (int *) malloc (sizeof(int)*288);
        for(i=0;i<93;i++)
                b [ i ]= s [ i ];
                s[0]=t3;
        for(i=1;i<93;i++)
                s [ i ]=b[i-1];

        for(i=93;i<177;i++)
               b [ i ]= s [ i ];
                s[93]=t1;
        for(i=94;i<177;i++)
                s [ i ]=b[i-1];

        for(i=177;i<288;i++)
                b [ i ]= s [ i ];
                s[177]=t2;
        for(i=178;i<288;i++)
                s [ i ]=b[i-1];
    free(b);
        b=NULL;
        return s;
}
回复此楼
感谢生活让我慢慢学会控制自己的情绪,学会包容与忍耐,学会不再去期待
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
回帖置顶 ( 共有1个 )

cw277

木虫 (正式写手)

cw277: 回帖置顶 2012-03-26 15:08:48
自己写了一个,经测试时间的确短了。

int * insert2(int s[], int t3,int t1,int t2)
{
       
int *pBuffer = (s + 177);
memmove(pBuffer+1,pBuffer,(288-178)*sizeof(int));
(*pBuffer)=t2;
pBuffer = s+93;
memmove(pBuffer+1,pBuffer,(177-94)*sizeof(int));
(*pBuffer)=t1;
pBuffer = s;
memmove(pBuffer+1,pBuffer,92*sizeof(int));
*pBuffer=t3;
return s;
}
感谢生活让我慢慢学会控制自己的情绪,学会包容与忍耐,学会不再去期待
14楼2012-03-26 15:08:03
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

nebulaly

木虫 (著名写手)


jjdg: 金币+1, 感谢参与 2012-03-24 01:52:39
看来看去,无非就是个循环语句
能有多慢?
几个微秒貌似不需要优化吧

要是觉得程序太长
memcpy就是了
7楼2012-03-23 23:08:50
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

nebulaly

木虫 (著名写手)


jjdg: 金币+1, 感谢应助 2012-03-24 01:52:51
说句题外话

return s

这种写法

就是产生一切问题的根源
8楼2012-03-23 23:12:11
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

lurencyj

木虫 (著名写手)

【答案】应助回帖


感谢参与,应助指数 +1
cw277: 金币+1, 我主要是想在这些位置插入t1.t2.t3,现在不知道怎么实现效率高一点? 2012-03-21 20:28:32
楼主的程序里面好多magic number啊,比如288,93,94, 177,178。
能说明一下么?
很女子很弓虽大
2楼2012-03-21 17:49:01
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)

【答案】应助回帖

★ ★
cw277: 金币+1, 我想写一个函数,输入形参是数组,但是插入操作过程是链表.. 请问这样可行么? 2012-03-21 22:26:52
余泽成: 金币+1, 谢谢参与应助! 2012-03-23 16:49:55
对于连续存储的数组,你的程序里面是O(N)了,应该是不能再优化了。

要是你经常做插入或者删除操作的话,可以考虑使用连表。
很女子很弓虽大
3楼2012-03-21 21:57:11
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

cw277

木虫 (正式写手)

引用回帖:
3楼: Originally posted by lurencyj at 2012-03-21 21:57:11:
对于连续存储的数组,你的程序里面是O(N)了,应该是不能再优化了。

要是你经常做插入或者删除操作的话,可以考虑使用连表。

而且返回的是一个数组。
感谢生活让我慢慢学会控制自己的情绪,学会包容与忍耐,学会不再去期待
4楼2012-03-21 22:27:36
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

cw277

木虫 (正式写手)

引用回帖:
3楼: Originally posted by lurencyj at 2012-03-21 21:57:11:
对于连续存储的数组,你的程序里面是O(N)了,应该是不能再优化了。

要是你经常做插入或者删除操作的话,可以考虑使用连表。

而且返回的是一个数组
感谢生活让我慢慢学会控制自己的情绪,学会包容与忍耐,学会不再去期待
5楼2012-03-21 22:28:14
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)

【答案】应助回帖

★ ★
jjdg: 金币+1, 感谢参与 2012-03-22 00:35:31
余泽成: 金币+1, 鼓励讨论! 2012-03-23 16:50:07
不太可行,从时间消耗上面来讲。

数组和链表区别在于数据结构。其实对电脑来说,稍微几次288个元素数组搬迁,耗时上面没有多大区别。
很女子很弓虽大
6楼2012-03-21 22:46:06
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

cw277

木虫 (正式写手)

引用回帖:
7楼: Originally posted by nebulaly at 2012-03-23 23:08:50:
看来看去,无非就是个循环语句
能有多慢?
几个微秒貌似不需要优化吧

要是觉得程序太长
memcpy就是了

我跑得是多次循环,这个函数要调用几千万次。   这个要是优化后十分可观!
感谢生活让我慢慢学会控制自己的情绪,学会包容与忍耐,学会不再去期待
9楼2012-03-24 09:58:35
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

cw277

木虫 (正式写手)

引用回帖:
8楼: Originally posted by nebulaly at 2012-03-23 23:12:11:
说句题外话

return s

这种写法

就是产生一切问题的根源

为什么这么说,能说一下原因么? 谢谢
感谢生活让我慢慢学会控制自己的情绪,学会包容与忍耐,学会不再去期待
10楼2012-03-24 09:59:10
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 cw277 的主题更新
信息提示
请填处理意见