質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

1回答

411閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2022/10/02 05:23

編集2022/10/02 17:13

前提

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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2022/10/02 07:30

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11268925501 teratailのヘルプ https://teratail.com/help#posted-otherservice をみて適切に処置してください。 「やむを得ず複数のサイトに質問を投稿された場合は、質問内容にマルチポストをする理由を書き、他のサイトの投稿へのリンクを貼ってください。 また、解決した際には必ずteratail及びすべての投稿に解決した旨と、どのように解決したかを記載してください。」 なお、知恵袋の方にはすでに回答が寄せられていますから、質問を削除して無かったことにするなどという回答者に失礼なことのありませんように。
thkana

2022/10/02 07:49

あ、あとここは「質問への追記・修正の"依頼"」の欄なので、応じた修正はもとの質問を編集することで対応お願いします。
退会済みユーザー

退会済みユーザー

2022/10/02 07:52

マルチポストについてしっかり確認しておりませんでした。できるだけ早くプログラムを完成させなければならないという気持ちから行ってしまいました。知らなかったとはいえ、推奨されていないことをしてしまい申し訳ございません。
guest

回答1

0

ベストアンサー

正しいプログラムは分かりませんが、以下の通りに作成すると実行が出来るようになりました。試したことの項目と同じプログラムを載せています。

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}

投稿2022/10/02 08:10

編集2022/10/02 08:13
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問