交换数组元素与数组索引的效率
Efficiency in swapping array elements vs Array indices
我有一个简短的问题:我知道这两个片段的复杂性是相同的。但是,我想知道哪个比较好,为什么?这是选择排序代码:
这是我写的:
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;
}
}
您的代码稍快一些,因为您仅在 a[j] < a[i]
时进行交换,而您朋友的代码总是进行交换。因此,在大多数情况下,您的代码将减少交换。
两个代码的复杂度确实一样,但是你的"constants"更小,所以你的代码更快。
我有一个简短的问题:我知道这两个片段的复杂性是相同的。但是,我想知道哪个比较好,为什么?这是选择排序代码:
这是我写的:
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;
}
}
您的代码稍快一些,因为您仅在 a[j] < a[i]
时进行交换,而您朋友的代码总是进行交换。因此,在大多数情况下,您的代码将减少交换。
两个代码的复杂度确实一样,但是你的"constants"更小,所以你的代码更快。