2013年12月10日火曜日

開発環境

初めてのコンピュータサイエンス(Jennifer CampbellPaul GriesJason MontojoGreg Wilson(著)長尾 高弘(翻訳))の11章(探索とソート)、11.7(練習問題)、11-6.をDartで解いてみる。

その他参考書籍

11.7(練習問題)、11-6.

コード

sample.dart

import 'dart:html';

void main() {
  InputElement run = querySelector('#run_dart');
  InputElement clear = querySelector('#clear');
  Element pre = querySelector('#pre0');
  run.onClick.listen((MouseEvent event){
    pre.text = '${window.navigator.userAgent}\n';
    int n = 10;
    List s1 = new List.generate(n, (int index) => index, growable:true);
    List s2 = new List.generate(n,(int index) => (n - 1) - index, growable:true);
    List s3 = new List.generate(n, (int index) => 0, growable:true);
    for(var f in [selectionSort, insertionSort]){
      for(List s in [s1, s2, s3]){
        List temp = f(s);
        int cmp = temp.first;
        int cp = temp[1];
        pre.text += '比較: ${cmp} コピー: ${cp}\n';
      }
    }
  });
  clear.onClick.listen((MouseEvent event) => pre.text = '');
}

List selectionSort(List sequence){
  int i = 0;
  int cmp = 0;
  int cp = 0;
  while (i != sequence.length){
    List temp = findMin(sequence, i, cmp);
    int smallest = temp.first;
    cmp  = temp[1];
    cp += 2;
    i += 1;
  }
  return [cmp, cp];
}

List findMin(List sequence, int i, int cmp){
 int smallest = i;
 i += 1;
 while(i != sequence.length){
   cmp += 1;
   if(sequence[i] < sequence[smallest]){
     smallest = i;
   }
   i += 1;
 }
 return [smallest, cmp];
}

List insertionSort(List sequence){
  int i = 0;
  int cmp = 0;
  int cp = 0;
  while(i != sequence.length){
    List temp = insert(sequence, i, cmp, cp);
    cmp = temp.first;
    cp = temp[1];
    i += 1;
  }
  return [cmp, cp];
}

List insert(List sequence, int b, int cmp, int cp){
  int i = b;
  while(i != 0){
    cmp += 1;
    if(sequence[i - 1] >= sequence[b]){
      i -= 1;
    } else {
      break;
    }
  }
  var v = sequence.removeAt(b);
  sequence.insert(i, v);
  cp += 2;
  return [cmp, cp];
}














						

0 コメント:

コメントを投稿