開発環境
- OS X Mavericks - Apple (OS)
- Dart Editor (開発環境)
- Dartium | Dart/ Structured web apps (ブラウザ, Dart VM 用 (Chromium with the Dart VM))
- Safari (ブラウザ, JavaScript 用)
- Dart (プログラミング言語)
初めてのコンピュータサイエンス(Jennifer Campbell、Paul Gries、Jason Montojo、Greg Wilson(著)長尾 高弘(翻訳))の11章(探索とソート)、11.7(練習問題)、11-6.をDartで解いてみる。
その他参考書籍
- What is Dart? [Kindle版] (O'Reilly Media) Kathy Walrath Seth Ladd (著) このブログでの感想
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 コメント:
コメントを投稿