Java插入排序: Counting Data Comparisons

标签 java sorting

我正在尝试使用 Java 为该插入排序算法的数据比较次数和数据交换次数放置一个计数器。虽然我相信计数器 swapsNo 放置正确,但 compsNo 没有给我预期的输出(均初始化为零)。我最初将其放置在当前用于在 compElem 与列表项进行比较的情况下进行计数的位置,但显然这只是增加了列表中每个项目的计数器。我想知道计数器是否应该在算法中或完全在其他地方出现两次。

public void insertionSort(T[] list, int length)
{
 for (int firstOutOfOrder = 1; firstOutOfOrder < length;
                               firstOutOfOrder ++)
 {
     Comparable<T> compElem =
               (Comparable<T>) list[firstOutOfOrder];
     compsNo++;

     if (compElem.compareTo(list[firstOutOfOrder - 1]) < 0)
     {
         Comparable<T> temp =
                     (Comparable<T>) list[firstOutOfOrder];
         //or perhaps compsNo++; should go here??
         int location = firstOutOfOrder;

         do
         {
             list[location] = list[location - 1];
             location--;
             swapsNo++;

         }
         while (location > 0 &&
                temp.compareTo(list[location - 1]) < 0);

         list[location] = (T) temp;

     }
   }
 }

更新:我在 while 循环(以前为 doWhile)内添加了 compsNo++ 的增量,并在 if 语句内添加了 swapsNo++ 的增量。这已接近预期输出,但我对自己的编辑还没有信心。

public void insertionSort(T[] list, int length)
{
 for (int firstOutOfOrder = 1; firstOutOfOrder < length;
                               firstOutOfOrder ++)

 {
     Comparable<T> compElem =
               (Comparable<T>) list[firstOutOfOrder];
     compsNo++;
     if (compElem.compareTo(list[firstOutOfOrder - 1]) < 0)
     {
         Comparable<T> temp =
                     (Comparable<T>) list[firstOutOfOrder];

         int location = firstOutOfOrder;



         while (location > 0 && temp.compareTo(list[location - 1]) < 0)
         {
             compsNo++;

             list[location] = list[location - 1];
             location--;
             swapsNo++;
         }




         list[location] = (T) temp;
         swapsNo++;
     }
  }
}

最佳答案

如果您想对比较进行计数,则应在包含 compareTo 调用的每一行之后或之前增加 compsNo

在您的代码中,有两次 compareTo 调用,并且只有一次 compsNo++

关于Java插入排序: Counting Data Comparisons,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23478748/

相关文章:

sorting - Haskell:带有多个参数的 SortBy(出生日期)

asp.net - 使用gridview asp.net进行排序和分页

java - Linux (Xubuntu) 下 Eclipse 上的 LWJGL

java - 带有 openCV 和 javafx 的 Jar 文件

java - 如何在java中使用apache tika从PDF文件中获取页眉和页脚

arrays - 为什么选择排序可以稳定或不稳定

linux - 在 bash 中对没有 uniq 的列进行排序和计数

java - 在 oracle 10g 中使用 play framework 2.0

java - 为什么我的生产者消费者程序被阻塞?

python - 按常见项目排序