我正在写两种不同的排序,一种是选择,另一种是插入。以下是我的插入排序方法
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个术语的比较。我想知道我的方法写得不正确,或者计数器放错了
答案 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--;
}
}
}