前提
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
1int Data[]; 2int N=10, L=100; 3 4void setup(){ 5Data=new int [N]; 6for(int i=0;i<N;i++){ Data[i]=(int)random(100); } 7noLoop(); 8} 9 10void draw() 11{ 12int[] Bucket; 13Bucket=new int[L]; 14println("----- before -----"); println(Data); 15 16for(int i=0; i<N; i++){ 17Bucket[Data[i]]++; 18} 19 20int N=0; 21for(int i=0; i<L; i++){ 22Data[N]=i; N++; 23} 24 25println("----- after -----"); println(Data); 26}
発生している問題・エラーメッセージ
このプログラムだと Data[N]=i; N++;にエラーが発生してしまいます。 『Bucket[i] 回以下を繰り返す』の部分を表せていないからだと思うのですが、その方法が分かりません。
追記
マルチポストについての知識がなかったため、同時にYahoo!知恵袋での投稿も行ってしまいました。早くプログラムを完成させなければならないという気持ちからの行動です。申し訳ございません。
指摘があった通り、知恵袋の方で解答を頂けたのでリンクを記載しておきます。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11268925501
試したこと
結局正しいプログラムは分かりませんが、実行は出来るようになったので以下に示して自己解決にしたいと思います。知恵袋の方で指摘のあった、ローカル変数の部分は変更できておりません。
Processing
1int Data[]; 2int N=10, L=100; 3 4void setup(){ 5 Data=new int [N]; 6 for(int i=0;i<N;i++){ Data[i]=(int)random(100); } 7 noLoop(); 8} 9 10void draw() 11{ 12 int[] Bucket; 13 Bucket=new int[L]; 14 println("----- before -----"); println(Data); 15 16 for(int i=0; i<N; i++){ 17 Bucket[Data[i]]++; 18 } 19 20 int N=0; 21 for(int i=0; i<L; i++){ 22 for(int j=0; j<Bucket[i]; j++){ 23 Data[N]=i; N++; 24 } 25 } 26 27println("----- after -----"); println(Data); 28}
回答1件
あなたの回答
tips
プレビュー