【发布时间】:2014-11-25 12:56:06
【问题描述】:
我正在写两种不同的类型,一种是选择,另一种是插入。以下是我的插入排序方法
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 项的 n 次比较。不知是我的方法写错了,还是计数器放错了
【问题讨论】:
-
您计算的是交换,而不是比较。 (即你没有计算导致
<=0的比较) -
在内部for循环中,将比较移动到for循环内部。目前,您仅在需要交换时才计数。如果比较是在循环内完成的,您将计算所有的比较。
-
@arunmoezhi 你的意思是从循环括号中取出条件并将它们放在循环的实际主体中吗?
-
是的。计数器递增后将其放在循环体内。
-
@njzk2 是的,我刚刚意识到这一点,感谢您引起我的注意。你说的很有道理,不敢相信我错过了。
标签: java insertion-sort selection-sort