這段代碼,c 1秒,java 9秒,c# 14秒,而python。。。

哎,不得不說最近見得鍵盤俠客太多了,作程序員沒兩天老是喜歡上嘴脣觸天,下嘴脣碰地的吹。java

本身分明都沒用過幾門語言,就對各門語言評頭論足說三道四,這麼語言多好那門語言有多爛。python

多是隨着時間也變得沒那麼浮躁,這換我剛畢業時候我估計我不免也加入其中與其爭論一番,工做這麼些年了心裏平靜了很多。android

再聽那些毛頭小子們評頭論足的我也就是微微一笑就算了。程序員

 

可是,忽然也起了興趣,各門語言的效率究竟能差多少,之前還真沒作過相關的試驗。真理不是據說、好像、估計就能出結果的。算法

沒有依據的話那叫信口雌黃。說出一個結果時候你得有足夠的依據。c#

 

就拿我最熟悉的幾門語言坐下對比,分別爲C,C#,JAVA,Python。數據結構

c,早在學生階段就每天再用,學習數據結構時候不知道寫了多少c代碼。函數

c#,是我如今天天在用的語言,使用c#嚴謹的語法+強大IDE,寫代碼比爲愛鼓掌還爽。性能

java,目前寫過許多android程序,網站也作過一些。學習

Python,目前爲止並未在工做中實際使用過,但用python寫過很多爬蟲。

相對來講以上四門語言我還都很熟悉,不存在新手不懂這門語言,發揮不出性能這種事了吧?

而後報一下機器配置,配置算是中等偏上吧,可是寫代碼足夠了。

說一下測試邏輯

 一個求水仙花數的算法,而後執行一萬次。測試每門語言的執行時間。

爲告終果可信度高,算法純手寫,不採用任何庫,第三方包。

 

首先測試老大哥c語言。

不得不說你大爺仍是你大爺,別看你大爺年齡大,依然寶刀未老,作起事情來依然長槍直入。

測試結果僅爲 1009ms。速度不錯,但其餘語言尚未執行,也很差說c究竟有多牛B。

#include<stdio.h>
#include "stdafx.h"

#include<time.h>   //用到clock()函數
void NarcissisticNumber() {
    int ge, shi, bai;
    for (int n = 100; n < 100000; n++) {
        ge = n % 10;
        shi = (n - ge) / 10 % 10;
        bai = (int)(n / 100);
        if (ge * ge * ge + shi * shi * shi + bai * bai * bai == n) {
            //printf("%d", n);
        }
    }

}


int main()
{
    int begintime, endtime;
    int a[1002];
    begintime = clock();
    int i = 100;    
    for (i = 1; i <= 10000; i++) {
        NarcissisticNumber();
    }
    endtime = clock();    
    printf("\n\nRunning Time:%dms\n", endtime - begintime);

    getchar();
    return 0;
}

 

 

與其說c是你大爺,C#多是個小家碧玉,小妞不錯,要臉蛋有臉蛋要身材有身材,聽話懂事。就是微軟這個家長家教太嚴不讓出門。

如今他爹彷佛意識到了這一點,鼓勵c#出去闖闖,爭取變成你們閨秀,好了到咱們的小家碧玉大顯身手的時候了,測試結果15130比他大爺慢了十倍多。

        static void Main(string[] args)
        {
            Stopwatch watch = new Stopwatch();
            Console.WriteLine("開始計時");
            watch.Start();
            for (int i = 1; i < 10000; i++)
            {
                NarcissisticNumber();
            }
            watch.Stop();
            string time = watch.ElapsedMilliseconds.ToString();
            Console.WriteLine($"C#執行時間:{time}");
            Console.ReadKey();
        }

        public static void NarcissisticNumber()
        {
            int ge, shi, bai;
            for (int n = 100; n < 100000; n++)
            {
                ge = n % 10;
                shi = (n - ge) / 10 % 10;
                bai = (int)(n / 100);
                if (ge * ge * ge + shi * shi * shi + bai * bai * bai == n)
                {
                    //Console.WriteLine(n.ToString());
                }
            }

        }

 

 

到咱們的性感少婦了,java從出道以來,追求者無數。至今不知道多少企業臨幸過java,多少門技術厚着臉皮,窮追不捨得追求着java這小niang們。俗話說的好,

美女身後蒼蠅多,java身後的蒼蠅簡直多的數不勝數。可是java這小妖精玩得轉,身後的蒼蠅們(庫)不乏優秀能幹者。

好了咱們看看少婦的辦事能力9372ms,這個結果然的有夠驚訝。本覺得在微軟的平臺上,java的執行效率不會高過c#(白白浪費了我臨幸c#這麼多年)。結果竟然

高出了一大截。

 

    public static void main(String args[]) {

        System.out.println("開始計算");
        long startTime = System.currentTimeMillis();
        for (int i = 1; i < 10000; i++) {
            NarcissisticNumber();
        }
        long endTime = System.currentTimeMillis();
        System.out.println("程序運行時間:" + (endTime - startTime) );
    }

    public static void NarcissisticNumber() {
        int ge, shi, bai;
        for (int n = 100; n < 100000; n++) {
            ge = n % 10;
            shi = (n - ge) / 10 % 10;
            bai = (int) (n / 100);
            if (ge * ge * ge + shi * shi * shi + bai * bai * bai == n) {
                    //System.out.println(String.valueOf(n));
            }
        }

    }

 

 

接下來到咱們的小妖精了,python真的我只能用小妖精來形容他。雖然他出生的很早,可是一直默默無聞。就是這些年忽然爆發了,簡直無所不能。

遊戲,網站,應用程序,爬蟲,AI。這小妖精就是用妖法迷住了你們,小妖精就是小妖精,活好不粘人,一切本着不主動、不拒絕、不負責的行事原則。你大爺(c)手藝牛逼,老年人嘮叨(代碼複雜)。

小家碧玉雖然好奈何教教太嚴,性感少婦蒼蠅多。小妖精簡直不要太簡單。

好了,看看咱們的小妖精究竟有多大本事。。。。

首先我跟你們解釋下,其餘語言進行了10000次水仙花,而python只進行1000次。是由於若是python要執行10000次幾分鐘都出不告終果,

我不敢相信這門語言真的差到這種程度,若是算法寫的有問題,還請你們指教

python 1000次執行結果54404ms,徹底無法跟以上語言相比。這個結果我真的不敢相信。。。。

 

import time


def NarcissisticNumber():
    ge = 0
    shi = 0
    bai = 0
    for n in range(100,100000):
        ge = n% 10
        shi = (n - ge) / 10 % 10
        bai = int(n / 100)
        if ge * ge * ge + shi * shi * shi + bai * bai * bai == n:
            continue


print("開始計時")    
start = time.time()        

for each in range(1000):
    NarcissisticNumber()

end = time.time();

print("Python運行時間:"+str((end - start)*1000))

 

最後強調下,以上全部debug模式。

 

好的,老鐵們。這篇文章收貨了太多黑跟質疑了。

首先我認可,有些問題牽考慮的。例如debug模式。

可是我無心黑C#,自打畢業以來天天都在敲c#,c#

對個人感情大家不瞭解,說我對比沒有意義的。我也認可

的確沒有意義,沒門語言都有本身的長項,本次測試僅僅

爲了測試,難道你能由於java執行的比c#快就再也不用c#?

 

技術這個東西永遠只有更高沒有最高,明天我還會更新本篇帖子的續篇。

這篇帖子只有這位老兄的回覆最爲中肯。 @五星 

 

續篇裏我改進如下幾個問題

1.再也不使用debug,使用release模式。java直接編譯成.class文件直接運行

2.防止編譯時對代碼優化,if 裏面要搞點事情

3.屢次測試

 

最後再強調本次測試僅爲測試,甚至能夠說是爲了玩,無心黑某門語言。這幾門語言每門語言我都喜歡。

技術討論觀點分歧再所不免,理性討論,請勿出言不遜。言行表明素質,代碼能力能夠查,人的修養不能差。

我是擅長接受建議的,我也不抵觸反對,但反對他人的同時你要拿出你本身的看法與方案,要否則與鍵盤俠何異?

相關文章
相關標籤/搜索