我有一个简单的问题:我知道两个片段的复杂性是一样的。然而,我想知道哪一个比较好,为什么?这是选择排序代码:
这就是我写的:
for (int i = 0; i < n - 1; i++)
{
for (int j = i + 1; j <= n - 1; j++)
{
if (a[j] < a[i])
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
这是我朋友写的:
for (int i = 0; i < n - 1; i++)
{
int iMin = i;
for (int j = i + 1; j <= n - 1; j++)
{
if (a[j] < a[i])
{
iMin = j;
}
int temp = a[i];
a[i] = a[iMin];
a[iMin] = temp;
}
}
答案 0 :(得分:1)
您的代码稍快一些,因为您只在a[j] < a[i]
时进行交换,而您朋友的代码始终进行交换。因此,在大多数情况下,您的代码将减少交换。
两个代码的复杂性确实相同,但是你的“常量”更小,所以你的代码更快。