用全排列算法比较c#和c++的运行效率

时间:2022-09-01 18:37:27
   经常在论坛看到许多人说c++写出的程序运行效率高,比c#速度快,于是我写了一段全排列的代码来测试两种语言的效率。经半人测试发现,两者速度差别并不明显,甚至可稍稍感觉到c#还快一点点,下面我贴出两个版本的代码,供大家自行测试,程序打开后执行完排列算法程序会自行退出,两者中退出较快效率则较高。

c#版:

using System;

namespace 全排列
{
    class Program
    {
        static void Main(string[] args)
        {
            char[] s = "12345678900".ToCharArray();
            Pl p = new Pl();
            p.AllPermutation(s, 0);
            // Console.WriteLine(p.count);
           // Console.ReadLine();
        }
    }

    class Pl
    {
        public int count = 0;
        public void AllPermutation(char[] s, int n)
        {
            for (int i = n; i < s.Length; i++)
            { 
                if (n != s.Length - 1)
                {
                    int tn = n + 1;
                    if (i != n)
                    {
                        char tempch = s[n];
                        s[n] = s[i];
                        s[i] = tempch;
                        AllPermutation(s, tn);
                        s[i] = s[n];
                        s[n] = tempch;
                    }
                    else
                    {
                        AllPermutation(s, tn);
                    }
                }
                else
                {
                    //    count++;
                     //   Console.WriteLine(s);
                }
            }
        }

    }
}

c++版:

#include <iostream> 

using namespace std; 

int Length = 11;
void AllPermutation(char s[], int n)
{
    for (int i = n; i < Length; i++)
    { 
        if (n != Length - 1)
        {
            int tn = n + 1;
            if (i != n)
            {
                char tempch = s[n];
                s[n] = s[i];
                s[i] = tempch;
                AllPermutation(s, tn);
                s[i] = s[n];
                s[n] = tempch;
            }
            else
            {
                AllPermutation(s, tn);
            }
        }
        else
        {
            //    count++;
           //  cout<<s<<endl;
        }
    }
}   

int main(int argc, char *argv[]) 

char s[] = {'1','2','3','4','5','6','7','8','9','0','0'};
AllPermutation(s,0);
//cin.get();
return 0; 



    

13 个解决方案

#1


围观一下!

#2


C#的执行效率不比源生语言差。这一点比JAVA可强多了。

#3


不要招来杀身之祸呀!呵呵呵呵……

#4


单纯的数值计算差别不大,你写个带图形界面,硬件调用的程序比较一下,就可看出差别

#5


C#执行效率可能比C++更好。

原因是C#是中间语言,可以即时编译出更适应目标平台的代码,比如充分利用新的指令集,为AMD或者Intel处理器选择更好的代码,充分优化多核心运算效率。

#6


C++程序一旦编译出来,就是机器代码了。

比如Intel新发布了iSSE6,用户升级了电脑。那么除非重新编译,否则C++的程序无法从中获益。

#7


这种优劣,只有烂机器上才能试得出来




#8


现在硬件配置都高了,感觉没那么明显

#9


学习了。。。

#10


引用 4 楼 qixingl 的回复:
单纯的数值计算差别不大,你写个带图形界面,硬件调用的程序比较一下,就可看出差别

正解

#11


简单的数据处理计算,看不出来什么端倪的!
  
就跟算平均数一样,取的数据越多,越复杂,算出来才越精确,
相反取的越少,简单的话,差距就很大了!

你试试,写一些复杂的东西,再比较就知道了!

#12


路过,接分

#13


看来还是 open source 的 c++ 程序好

#1


围观一下!

#2


C#的执行效率不比源生语言差。这一点比JAVA可强多了。

#3


不要招来杀身之祸呀!呵呵呵呵……

#4


单纯的数值计算差别不大,你写个带图形界面,硬件调用的程序比较一下,就可看出差别

#5


C#执行效率可能比C++更好。

原因是C#是中间语言,可以即时编译出更适应目标平台的代码,比如充分利用新的指令集,为AMD或者Intel处理器选择更好的代码,充分优化多核心运算效率。

#6


C++程序一旦编译出来,就是机器代码了。

比如Intel新发布了iSSE6,用户升级了电脑。那么除非重新编译,否则C++的程序无法从中获益。

#7


这种优劣,只有烂机器上才能试得出来




#8


现在硬件配置都高了,感觉没那么明显

#9


学习了。。。

#10


引用 4 楼 qixingl 的回复:
单纯的数值计算差别不大,你写个带图形界面,硬件调用的程序比较一下,就可看出差别

正解

#11


简单的数据处理计算,看不出来什么端倪的!
  
就跟算平均数一样,取的数据越多,越复杂,算出来才越精确,
相反取的越少,简单的话,差距就很大了!

你试试,写一些复杂的东西,再比较就知道了!

#12


路过,接分

#13


看来还是 open source 的 c++ 程序好