冒泡排序比较计数总是相同的
bubble sort comparison count is always the same
我无法理解比较的工作原理以及冒泡排序(或与此相关的任何排序)中进行了多少比较。在我的冒泡排序示例代码中:
public class BS
{
public static void main (String[] args)
{
int[] Array = {5,1,4,2,8};
System.out.println("Array Before Bubble Sort:");
for (int element : Array)
System.out.print(element + " ");
bubbleSort(Array);
System.out.println("Array After Bubble Sort:");
for (int element : Array)
System.out.print(element + " ");
System.out.print("\n");
}
public static void bubbleSort(int[] array)
{
int lastPos;
int index;
int temp;
int comp = 0;
int swap = 0;
for(lastPos = array.length - 1; lastPos >= 0; lastPos--)
{
for(index = 0; index <= lastPos - 1; index++)
{
comp++;
if(array[index] > array[index + 1])
{
swap++;
temp = array[index];
array[index] = array[index + 1];
array[index + 1] = temp;
}
}
}
System.out.println("\nComparisons: " + comp);
System.out.println("Swaps: " +swap;
}
}
输出是这样的:
Array Before Bubble Sort:
5 1 4 2 8
Comparisons: 10
Swaps: 4
Array After Bubble Sort:
1 2 4 5 8
据我所知,交换次数是正确的,但比较次数不应该是 12 次吗?无论我在数组中放入什么数字,比较次数始终为 10。不同数组的冒泡排序比较是否不同?还是取决于数组的大小?我找不到任何关于此的见解,我真的很困惑。我将不胜感激,如果需要,我将使用更多信息进行编辑。
无论数组中的值是什么,冒泡排序的最佳情况、最坏情况和平均情况始终相同。即使数组已经正确排序,它也会始终将每个值与以下每个值进行比较。所以当你说比较只会根据数组中值的数量改变时你是正确的
冒泡排序比较仅取决于列表中的元素数。首先,它会进行 4 次比较,然后是 3 次,然后是 2 次,最后是 1 次,对于您给定的包含 5 个元素的示例。如果他们在正确的位置,它不会交换他们。
如果不检查您的数组是否已排序,它将始终根据数组的大小执行固定次数的检查。
在您的 for 循环中,如果您检查是否完成了整个传递而没有任何交换,那么您可以提前退出,这意味着对包含 5 个元素的已排序数组进行排序只需要进行 4 次比较。
在测试你的算法时,你应该总是抛出极端情况,例如你的算法在
上的结果是什么
{}
{1}
{0,0,0,0}
{1,1,3,1,1}
{1,2,3,4,5,6}
{10,9,8,7,6,5,4,3,2,1,}
{1,5,1,5,1,5,1,5,1,5,1}
以及一些真正随机的序列。
我无法理解比较的工作原理以及冒泡排序(或与此相关的任何排序)中进行了多少比较。在我的冒泡排序示例代码中:
public class BS
{
public static void main (String[] args)
{
int[] Array = {5,1,4,2,8};
System.out.println("Array Before Bubble Sort:");
for (int element : Array)
System.out.print(element + " ");
bubbleSort(Array);
System.out.println("Array After Bubble Sort:");
for (int element : Array)
System.out.print(element + " ");
System.out.print("\n");
}
public static void bubbleSort(int[] array)
{
int lastPos;
int index;
int temp;
int comp = 0;
int swap = 0;
for(lastPos = array.length - 1; lastPos >= 0; lastPos--)
{
for(index = 0; index <= lastPos - 1; index++)
{
comp++;
if(array[index] > array[index + 1])
{
swap++;
temp = array[index];
array[index] = array[index + 1];
array[index + 1] = temp;
}
}
}
System.out.println("\nComparisons: " + comp);
System.out.println("Swaps: " +swap;
}
}
输出是这样的:
Array Before Bubble Sort:
5 1 4 2 8
Comparisons: 10
Swaps: 4
Array After Bubble Sort:
1 2 4 5 8
据我所知,交换次数是正确的,但比较次数不应该是 12 次吗?无论我在数组中放入什么数字,比较次数始终为 10。不同数组的冒泡排序比较是否不同?还是取决于数组的大小?我找不到任何关于此的见解,我真的很困惑。我将不胜感激,如果需要,我将使用更多信息进行编辑。
无论数组中的值是什么,冒泡排序的最佳情况、最坏情况和平均情况始终相同。即使数组已经正确排序,它也会始终将每个值与以下每个值进行比较。所以当你说比较只会根据数组中值的数量改变时你是正确的
冒泡排序比较仅取决于列表中的元素数。首先,它会进行 4 次比较,然后是 3 次,然后是 2 次,最后是 1 次,对于您给定的包含 5 个元素的示例。如果他们在正确的位置,它不会交换他们。
如果不检查您的数组是否已排序,它将始终根据数组的大小执行固定次数的检查。
在您的 for 循环中,如果您检查是否完成了整个传递而没有任何交换,那么您可以提前退出,这意味着对包含 5 个元素的已排序数组进行排序只需要进行 4 次比较。
在测试你的算法时,你应该总是抛出极端情况,例如你的算法在
上的结果是什么{}
{1}
{0,0,0,0}
{1,1,3,1,1}
{1,2,3,4,5,6}
{10,9,8,7,6,5,4,3,2,1,}
{1,5,1,5,1,5,1,5,1,5,1}
以及一些真正随机的序列。