2014年1月6日月曜日

ソート アルゴリズム

最近、日本の大学とアメリカの大学で教える情報教育にものすごい差があることにとても驚かされます。

たとえば、理系の情報学科の学生が大学一年で習う、数値を小さい順に並べるアルゴリズム。
日本の多くの大学生はqsortという関数を教えられますが、スタンフォードの学生はラムダ式で記述。
C++言語やJava言語なんて昔とまったく文法違うんです。
ビジネス的に生産性の高いというか、安く品質の良いコードが書けるようにプログラム言語の記述方法が変わってきています。そして、大学の教育でもきちんと生産性の高い記述方法を教える。
この一貫した体制というか新しいものを常に求める姿勢が本当に素晴らしいです。

C++でのソートの方法を時代ごとに書いてみました。
下に行くほど最新の記述方法になります。

昔はgccでコンパイルしていたものが、いまやMacOSやGoogleではclang+llvmになっています。
スタンフォードではもちろん最新のコンパイラ。
たぶん日本の大学は中国とインドと比べても負けてます。

日本の情報分野の生産性の低さと競争力のなさをとても悲しく思う今日この頃。



------------------------
#include <stdio.h>
#include <iostream>
#include <algorithm>

using namespace std;

int myqfunction (int* i,int* j)
{
return *i-*j;
}

bool myfunction (int i,int j)
{
return (i<j);
}

struct myclass {
  bool operator() (int i,int j) {
 return (i<j);
  }
} myobject;


int main () {
  int myints[] = {32,71,12,45,26,80,53,33};

  // using qsort
  qsort(myints,8,sizeof(int),(int(*)(const void*,const void*))myqfunction);

  // using default comparison (operator <):
  sort (myints, myints+8);

  // using function as comp
  sort (myints, myints+8, myfunction);

  // using object as comp
  sort (myints,myints+8, myobject);

  // using rambda
  sort (myints,myints+8, [](int x,int y){return (x<y);});


  return 0;
}



0 件のコメント:

コメントを投稿