如何计算选择和插入排序中的比较?

时间:2014-09-30 19:28:46

标签: java insertion-sort selection-sort

我正在写两种不同的排序,一种是选择,另一种是插入。以下是我的插入排序方法

public static void  iSort(String[] array)
{
  int i, j, k;
  String temp; 
  for(i = 1; i<array.length; i++)
  {
   k=i;
   for(j = k-1; j>=0 && array[j].compareTo(array[k])>0; j--)
   {
    ccounter++;
     temp = array[j];
     array[j] = array[k];
     array[k] = temp;
     k--;
   }
   }
 }

其中ccounter是一个静态类变量。当我使用1000个元素的字符串数组测试时,我得到的值为239507.但是,当我使用正确排序的字符串数组进行测试时,我得到的值为零,我知道这是不正确的,因为最好的情况是n个术语的比较。我想知道我的方法写得不正确,或者计数器放错了

2 个答案:

答案 0 :(得分:1)

问题在于,如果因为compareTo()返回false而退出循环,则不计算最终比较。

如果我写这篇文章,我会将比较代码包装在一个函数中,该函数将调用compareTo()并递增计数器。然后我会专门使用这个包装器函数来进行所有比较。这样就没有错误计算的可能性。

答案 1 :(得分:0)

每次执行内循环时递增计数器,并在递增计数器后进行比较

public static void  iSort(String[] array)
{
  int i, j, k,ccounter=0;
  String temp; 
  for(i = 1; i<array.length; i++)
  {
        k=i;
        for(j = k-1; j>=0; j--)
        {
                 ccounter++; //increment counter for every execution of inner loop
                 //better to do integer comparison than string comparison
                 if(Integer.parseInt(array[j]) <= Integer.parseInt(array[k]))
                 {
                     break;
                 }
                 temp = array[j];
                 array[j] = array[k];
                 array[k] = temp;
                 k--;
        }
   }
}