你的for迴圈真的高效嗎 優化for迴圈第一章

2021-06-06 10:15:10 字數 1916 閱讀 3643

在我們所寫的程式中,幾乎沒有不用到for迴圈的,但是,對於for迴圈,很多人確實效率很低的,包括我看得很多**,for迴圈的執行效率非常低,下面我就舉個例子來說明:

view plaincopy to clipboardprint?

#include

char *string="zhangbo";   

int main(int argc,char **argv)   

{   

int i;   

for(i=0;i

char *string="zhangbo";

int main(int argc,char **argv)

{int i;

for(i=0;i這個上邊的程式程式我想大家都明白,那我問問讀者,你知道這個程式的效率是多少嗎?

你肯定不屑的說,不就是n嗎?其實,你錯了,你說的n只是在演算法層面上的優化,其實對於底層的優化還沒做好,這段**的效率是n^2(n的平方),為什麼?是這樣的,我們在每次迴圈的時候,都會呼叫strlen函式,這個函式的效率也是n,所以,我們要再加乙個變數,比如下邊所看到的,

view plaincopy to clipboardprint?

#include

char *string="zhangbo";   

int main(int argc,char **argv)   

{   

int i,k;   

k=strlen(zhangbo);   

for(i=0;i

char *string="zhangbo";

int main(int argc,char **argv)

{int i,k;

k=strlen(zhangbo);

for(i=0;i這個程式的效率是2n,當n很大時,我就不說了。

再看這個例子:

view plaincopy to clipboardprint?

#include

int main(int argc,char **argv)   

{   

int i,m,k1,k2,k3,k4,k5,k6,k7,k8;   

m=10000000;   

for(i=0;i

int main(int argc,char **argv)

{int i,m,k1,k2,k3,k4,k5,k6,k7,k8;

m=10000000;

for(i=0;i我們再看這個for迴圈,我們是讓這些數每次迴圈都加1,這個效率也不是達到了最優,是這樣的,在每次for迴圈的時候,編譯器會給變數i,變數m每個獨佔乙個暫存器,因為是迴圈嘛,編譯器給i和m也是為了效率考慮,不用再向暫存器載入每次迴圈的判斷變數了,但是,一般基於intel的處理器都只有8個通用暫存器,這樣,我們就剩下了6個暫存器給for迴圈裡的內容中的變數使用,但是,我們的變數有8個,我們這時會在把其他的變數入棧,這樣,我們的效率變低了,每次出戰或者入棧都會消耗兩個cpu時鐘週期,這樣,我們就總共滿了8個週期,但是,如果更多呢?呵呵!

我們可以這樣該我們的程式;

view plaincopy to clipboardprint?

#include

int main(int argc,char **argv)   

{   

int i,m,k1,k2,k3,k4,k5,k6,k7,k8;   

m=10000000;   

for(i=0;i

int main(int argc,char **argv)

{int i,m,k1,k2,k3,k4,k5,k6,k7,k8;

m=10000000;

for(i=0;i這樣的效率就得到了很大改善!

結束話:故天將大任於斯人也,必先苦其心志,勞其筋骨,餓其體膚,空乏其身,行拂亂其所為,所以動心忍性,增益己所不能!——孟子

你真的懂迴圈嗎

好了今天我來講講什麼是迴圈吧,你又真的懂迴圈嗎?讓我來講講迴圈的細節吧和判斷吧 1 for迴圈樣式 for var i 0 i 5 i 它的條件表示式就是先寫for 在寫內部的條件,在js中宣告變數也是可以不加var直接就可以 for i 0 i 5 i 但這樣寫也有一點不對,因為i時區域性變數最好...

你真的了解功能鍵F7嗎?

您知道在使用windows命令提示符時按f7鍵會顯示乙個包含以前鍵入的命令列表的框嗎?如果沒有,那麼這些技巧可以幫助您更有效地開發命令提示符的作用。此功能最初是在ms dos中引入的doskey程式的一部分,並作為tsr 終止和駐留程式 載入。雖然該程式至今仍然可用,但其大部分功能現在都直接內建在w...

你真的了解SEO搜尋引擎優化嗎?

你真的了解seo搜尋引擎優化嗎?小陳這就帶你了解seo seo其實是sem的乙個子集,sem包含了競價廣告 新聞源營銷 百科營銷 問答營銷等,它幾乎包含了所有在搜尋結果頁實現展現的手段。所以通常我們直接把sem和競價廣告等同起來了,其實這是乙個包含與被包含的關係,是兩個不同的概念。很多企業覺得sem...