Processingでバケットソートを実行したい

前提

Processingでバケットソートについてやっています。大学の授業で扱い、バケットソートの仕組みについては理解できているのですが、実際にプログラムにしようとすると実行できません。

実現したいこと

ランダムに生成した10個の数字を昇順に並び替えるというプログラムを実行しようと思っています。

条件

指定された条件は
・データは、L 未満(0以上)の数値と仮定する
・ステップ1 Bucket[ 0 ~L-1 ] を0にする
・ステップ2 0≦i<Nに対して、以下を繰り返す。
『Bucket[ Data[i] ]++』
・ステップ3 N=0;
0≦i<L に対して、以下を繰り返す。
『Bucket[i] 回以下を繰り返す』
【Data[N] = i; N++;】

現段階で書いたコードは以下のようになっています。

Processing

int Data[];int N=10, L=100; void setup(){Data=new int [N];for(int i=0;i<N;i++){ Data[i]=(int)random(100); }noLoop();} void draw(){int[] Bucket;Bucket=new int[L];println("----- before -----"); println(Data); for(int i=0; i<N; i++){Bucket[Data[i]]++;} int N=0;for(int i=0; i<L; i++){Data[N]=i; N++;} println("----- after -----"); println(Data);}

発生している問題・エラーメッセージ

このプログラムだと Data[N]=i; N++;にエラーが発生してしまいます。 『Bucket[i] 回以下を繰り返す』の部分を表せていないからだと思うのですが、その方法が分かりません。

試したこと

二重for構文を作れば一応実行できるのですが、大学の先生曰く、二重for構文を使わずに実行できるプログラムになるとのことでした。

コメントを投稿

0 コメント