ヒープソートの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
「ソートできません」とありますが、具体的にどうなるのですか?
・エラーはなく動作自体は完了するのでしょうか?
・結果の配列は元の配列の並べ替えにはなっていますか?
修正しました。
えっと、downHeapメソッドはどこからどのように呼ばれているのですか?
以下のようにです
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();
}
質問の結果になる全コードを **ご質問を編集して、ファイル毎に** ご提示頂くのが良いように思います。