這段代碼,c 1秒,java 9秒,c# 14秒,而python。。。
哎,不得不說最近見得鍵盤俠客太多了,做程序員沒兩天總是喜歡上嘴唇觸天,下嘴唇碰地的吹。
自己分明都沒用過幾門語言,就對各門語言評頭論足說三道四,這麽語言多好那門語言有多爛。
可能是隨著時間也變得沒那麽浮躁,這換我剛畢業時候我估計我難免也加入其中與其爭論一番,工作這麽些年了內心平靜了不少。
再聽那些毛頭小子們評頭論足的我也就是微微一笑就算了。
但是,突然也起了興趣,各門語言的效率究竟能差多少,以前還真沒做過相關的試驗。真理不是聽說、好像、估計就能出結果的。
沒有依據的話那叫信口雌黃。說出一個結果時候你得有足夠的依據。
就拿我最熟悉的幾門語言坐下對比,分別為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模式。
這段代碼,c 1秒,java 9秒,c# 14秒,而python。。。