2016-04-16 18 views
0

私は、メソッドに渡された所定の範囲内でのみソートを実行するHeapsortメソッドを作成しようとしています。範囲の下限と上限が渡され、これらの値はヒープ内の値に対応し、ヒープのインデックスには対応しません。例えば、入力配列は次のようになります:28 10 49 20 59 61 17そして、もしlow = 49、high = 61ならば、Heapsortの後の配列は次のようになります:28 10 20 49 59 61 17.範囲は変わらない。私はすでに動作しているHeapsortメソッドを持っていますが、私の質問はどのようにこのメソッドを渡した範囲内でソートするように変更できますか?与えられた範囲内のHeapsort

public static void heapSort(int[] array, int low, int high) 
    {   
     // Build a maxHeap 
     for(int i = array.length/2; i >= 0; i--) 
     { 
      percolateDown(array, i, array.length); 
     } 

     // Heap sort 
     for(int i = array.length - 1; i > 0; i--) 
     { 
      swap(array, 0, i); 
      percolateDown(array, 0, i); 
     } 
    } 

ご覧のとおり、私の方法では低い値と高い値を受け入れますが、現在はこれらの値で何もしません。私はアルゴリズムが範囲内にあるかどうかを判断し、そのブール値が真であるときだけソートするブールフラグを保持しようとしました。しかし、これはうまくいかなかった。誰かが私を助けることができれば、それは大変に感謝されるでしょう。

ありがとうございます!

+0

あなたが望むのはソートではありません。値41,59および61は、元の配列ですでにソートされています。あなたが望むのは、49と61の間のすべての値が一緒になるように配列を並べ替えることです。グループの立場がどんなものであるべきかははっきりしない。 –

+0

明らかに、私が望むものがソートされていることを理解する知性を持っていません。あなたは私が私の例で与えた価値ではないので、あなたはコメントでもありません。あなたは本当にそのような愚かなコメントをする前に考える必要があります。 –

+0

いいえ、あなたの質問は理にかなっていません。たとえば、49から61の範囲外のすべての値は変更されず、20がその位置を変更するとします。また、49,59、および61の部分列は、範囲外の値から分離されている場合は、すでにソートされています。私のコメントはダムではありませんでした。あなたの返信は、一方で... –

答えて

0

指定された範囲内の値で新しい配列を作成し、次に新しい配列のみをヒープソートすることができます。次に元の配列の要素を置き換えます。

関連する問題