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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Q&A

1回答

1247閲覧

ヒープソートのHeapメソッドの実装

frere

総合スコア4

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

0グッド

0クリップ

投稿2020/08/10 01:26

編集2021/11/17 20:02

ヒープソートのdownHeapメソッドを作ったのですが以下のとうり、ソートできません。間違っている箇所がわからないです。
[9,6,5,5,3,3,2,1,4,1]
[9,6,5,5,3,3,2,1,4,1]

Java

1private void Heap(int n){ 2 3 if(n != 0){ 4 T ret = data.get(0); 5 data.set(0, data.get(n)); 6 int v = parent(n); int lv = leftChild(n); int rv = rightChild(n); 7 while(lv < n){ 8 if( rv < n && cmp.compare(data.get(v) , data.get(lv)) < 0 && cmp.compare(data.get(lv) , data.get(rv)) >= 0){ 9 swap(v, lv); v = lv; 10 } 11 else if(rv < n && cmp.compare(data.get(v) , data.get(rv)) < 0 && cmp.compare(data.get(lv) , data.get(rv)) < 0 ){ 12 swap(v,rv); 13 v = rv; 14 } 15 else if(rv == n && cmp.compare(data.get(v) , data.get(lv)) < 0){ 16 swap(v,rv); 17 v = lv; 18 } 19 else 20 break; 21 lv = 2*v +1; 22 rv = 2*v +2; 23 } 24 data.add(ret); 25 } 26 } 27 28 29 30 31

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

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

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

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

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

maisumakun

2020/08/10 01:29

「ソートできません」とありますが、具体的にどうなるのですか? ・エラーはなく動作自体は完了するのでしょうか? ・結果の配列は元の配列の並べ替えにはなっていますか?
frere

2020/08/10 01:35

修正しました。
maisumakun

2020/08/10 01:38

えっと、downHeapメソッドはどこからどのように呼ばれているのですか?
frere

2020/08/10 01:41

以下のようにです public static <E> void sort(ArrayList<E> a, Comparator<E> c){ HeapSort<E> s = new HeapSort<>(a, c); s.hsort(); } private void hsort() { for(int i = 0; i < data.size(); i++){ upHeap(i); } printHeap(); for(int i = data.size() - 1; i == 0; i-- ){ downHeap(i); } printHeap(); }
jimbe

2021/11/18 10:27 編集

質問の結果になる全コードを **ご質問を編集して、ファイル毎に** ご提示頂くのが良いように思います。
guest

回答1

0

投稿が1年前の様なので、質問自体が実質的な CLOSED 状態かもしれませんが・・・
とにかく downHeap() が動かない、という事の様なので、

before

1for(int i = data.size() - 1; i == 0; i--) { 2 downHeap(i); 3}

after

1for(int i = data.size() - 1; i >= 0; i--) { 2 downHeap(i); 3}

だったりしませんか?
i == 0 -> i >= 0 です。

投稿2021/11/18 16:52

momodx

総合スコア185

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問