我正在努力学习一项测试和一项研究问题,我无法与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;
}
}
}
}
答案 0 :(得分: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