我需要在我的代码中实现双向冒泡排序。
换句话说,in
将从左到右首先携带最大值。
但是当它到达out
时,它应该反转并从右到左携带最小值。
我被建议在当前索引之外实现另一个 out
索引。
这是我目前所拥有的——只有 2 个循环。我猜我必须以某种方式将它们结合起来?
public void bubbleSort() {
int out, in; // nElems in my case is 4, because I have 4 elements in my array
for(out=nElems-1; out>1; out--) // outer loop backward
for(in=out; in>1; in--) // inner loop backward
if(a[in] < a[in-1])
swap(in, in-1);
for(out=0; out<nElems; out++) // outer loop forward
for(in=0; in<out; in++) // inner loop forward
if(a[in] > a[in+1])
swap(in, in+1);
最佳答案
public void bidirectionalBubbleSort()
{
int left = 0, right = a.length-1;
while (left < right)
{
for (int pos = left; pos < right; pos++)
{
if (a[pos] > a[pos+1])
swap(pos, pos+1);
}
right--;
for (int pos = right; pos > left; pos--)
{
if (a[pos] < a[pos-1])
swap(pos, pos-1);
}
left++;
}
}
关于java - Java 中的双向冒泡排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3832229/