我必须对一个简单的bubblesort程序进行以下两个修改:
第一次传递后,最大数字保证在数组中编号最大的元素中;在第二次传球后,两个最高的数字是“到位”;等等。不要在每次传递中进行九次比较,而是修改冒泡排序,在第二次传球中进行八次比较,在第三次传球中进行七次比较,依此类推。
数组中的数据可能已经按照正确的顺序或接近正确的顺序排列,那么为什么如果少数就足以进行九遍?修改排序以在每次通过结束时检查是否进行了任何交换。如果没有,数据必须已经按正确的顺序排列,因此程序应该终止。如果已进行互换,则至少需要再传递一次。“
我将非常感谢任何关于如何处理这些问题的帮助!
//sort elements of array with bubble sort
public static void bubbleSort (int array2[])
{
//loop to control number of passes
for (int pass = 1; pass < array2.length; pass++)
{
//loop to control number of comparisons
for (int element = 0; element < array2.length - 1; element++)
{
//compare side-by-side elements and swap them if
//first element is greater than second element
if (array2[element] > array2[element + 1]){
swap (array2, element, element + 1);
}
}
}
}
//swap two elements of an array
public static void swap (int array3[], int first, int second)
{
//temporary holding area for swap
int hold;
hold = array3[first];
array3[first] = array3[second];
array3[second] = hold;
}
答案 0 :(得分:0)
我认为这会对你有用。添加一个布尔值进行检查,每次运行都会从j
中减去运行(input.length
)。
public static int[] bubbleSort(int input[])
{
int i, j, tmp;
bool changed;
for (j = 0; j < input.length; j++)
{
changed = false;
for (i = 1; i < input.length - j; i++)
{
if (tmp[i-1] > input[i])
{
tmp= input[i];
input[i] = input[i-1];
input[i-1] = tmp;
changed = true;
}
}
if (!changed) return input;
}
return input;
}