// не правильно работает
private void siftDown2(int i)
{
int l ;
int r ;
int j = i;
do
{
l = getLeft(i);
r = getRight(i);
j = i;
if (l < size && elems[j] < elems[l])
j = l;
if (r < size && elems[j] < elems[r])
j = r;
if (j != i)
{
swap(i, j);
i = j;
}
} while (j != i);
}
// работает
private void siftDown(int i)
{
var l = getLeft(i);
var r = getRight(i);
int j = i;
l = getLeft(j);
r = getRight(j);
j = i;
if (l < size && elems[j] < elems[l])
j = l;
if (r < size && elems[j] < elems[r])
j = r;
if (j != i)
{
swap(i, j);
siftDown(j);
}
}
//...declarations and initializations omitted
do
{
//...some code omitted
if (j != i)
{
swap(i, j);
i = j;
}
} while (j != i);
//...declarations and initializations omitted
do
{
//...some code omitted
if (j != i)
{
swap(i, j);
i = j;
}
else break;
} while (true);