2

我正在尝试学习一个测试和一个我无法与 BubbleSort 达成交易的学习问题。问题是:

修改下面的 BubbleSort 代码以使其执行短路。我的意思是,修改它,以便如果在没有进行任何交换的情况下完成传递,则执行将停止。

public static<T extends Comparable<T>> void bubbleSort(T[] data)
{
  int position, scan;
  T temp;

  for (position = data.length - 1; position >= 0; position--)
  {
    for (scan = 0; scan <= position - 1; scan++)
    {
      if (data[scan].compareTo(data[scan+1]) > 0)
      {
        /**Swap the values*/
        temp = data[scan];
        data[scan] = data[scan+1];
        data[scan + 1] = temp;
      }
    }
  }
}    
4

1 回答 1

2

您需要一个布尔标志或一个状态。

快速的谷歌搜索会为您省去麻烦:http ://rosettacode.org/wiki/Sorting_algorithms/Bubble_sort

repeat
    hasChanged := false
    decrement itemCount
    repeat with index from 1 to itemCount
        if (item at index) > (item at (index + 1))
            swap (item at index) with (item at (index + 1))
            hasChanged := true
until hasChanged = false
于 2013-05-07T00:17:00.560 回答