比较中最糟糕和最好的情况

时间:2017-04-27 19:24:19

标签: java arrays algorithm sorting

  

给定两个double值数组,按升序排序,一个包含100个元素,另一个包含10个元素,在将这些数组合并为一个排序数组的最佳算法中需要进行多少次比较,最好的情况,在最坏的情况下?

答案是:

  

最佳案例:10次比较

     

最坏情况:109比较

在你把我作为家庭作业问题或愚蠢的问题标记出来之前,请听我说。我将解释我的推理,并且我做了标题,好像任何人都有关于迭代/比较的类似问题,他们可以看一下。

我理解10次比较的最佳情况,因为较短数组中的所有值必须小于100个值的较大数组的所有值。然后你只进行一次比较并对它们进行排序。

但是对于最糟糕的情况,我没有得到109次比较。我不知道问题是要求使用合并排序来比较它,其中短阵列中的每个单个数字将进行大约7次比较(log2 ^ 100 = 6.64),7次10是70而不是109。

我做错了吗?这个问题的答案也没有帮助。如果你们都能理解并解释这一点,我们将不胜感激。

即使有了答案,我也不了解如何进行比较以及使用何种类型的排序(如果使用的话)。有人可以再看一遍吗?

1 个答案:

答案 0 :(得分:2)

对于最坏的情况,请考虑

的情况

Array-11,2,3,4,5,6,7,8,9,110
Array-210,11,12,13,14,15,.....,109

合并它们的最佳方法是比较两个数组的第一个元素(如果可用),然后取最小值并继续进行该数组。

因此,如果我们计算总比较次数,First 9的{​​{1}}元素将与Array-1的第一个元素进行比较,因为Array-2的{​​{1}}元素更大到目前为止first所以Array-2的{​​{1}}元素。

现在first 9的最后一个元素在所有元素中是最大的,所以很明显它最终会在合并中出现但是Array-1中存在Total Comparisons = 9个元素,这些元素将与array-1的元素。

所以这需要进行总计all次比较。现在array-2。所以在这种情况下,最坏的情况是最大array-1比较。

修改

合并代码:

100

所以这里当我们比较两个数组的元素时,它被算作比较。最好的情况,

Total Comparisons = 100 + 9 = 109 = 109
Merge(int array1[],int array2[]) { int array3[]=new int[array1.length+array2.length]; int point1=0; //indicating current element of array1 int point2=0; //indicating current element of array2 int point3=0; //indicating current element of resultant array3 while(point1<array1.length && point2<array2.length) { if(array1[point1]>array2[point2]) //This is to be counted as a comparison { array3[point3]=array2[point2]; //Take element of array2 point2++; //move to the next element of array2 point3++; //move to the next element of array3 } else { array3[point3]=array1[point1]; //Take element of array3 point1++; //move to the next element of array1 point3++; //move to the next element of array2 } } while(point1<array1.length) { array3[point3]=array1[point1]; //Take element of array3 point1++; //move to the next element of array1 point3++; //move to the next element of array2 } while(point2<array2.legnth) { array3[point3]=array2[point2]; //Take element of array2 point2++; //move to the next element of array2 point3++; //move to the next element of array3 } } = Array-1

因此,此处的总比较将为1,2,3,4,5,6,7,8,9,10,在Array-2比较后,11,12,13,14,.....,110将变为空(所有元素都将被采用)。因此,不会进行更多的比较。因此,最佳情况下的总体比较为10

如果要打印任何输入的总比较,请在算法中进行少量更改。

定义一个变量10,然后每次进行比较时,递增它。因此,在比较条件下进行更改:

Array-1

然后最后打印10。这是了解逻辑的更好方法。