1. 程式人生 > >這段代碼,c 1秒,java 9秒,c# 14秒,而python。。。

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

寫代碼 clu read art con code 身後 and 應用程序

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

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

可能是隨著時間也變得沒那麽浮躁,這換我剛畢業時候我估計我難免也加入其中與其爭論一番,工作這麽些年了內心平靜了不少。

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

但是,突然也起了興趣,各門語言的效率究竟能差多少,以前還真沒做過相關的試驗。真理不是聽說、好像、估計就能出結果的。

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

就拿我最熟悉的幾門語言坐下對比,分別為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。。。