如何解决Shell 排序算法,程序超时 C++
它告诉我我的程序已超时。 insertSortInterleaved 函数效果很好,但是当我尝试输入间隙值时,程序超时。请帮忙
void insertionSortInterleaved(int numbers[],int numbersSize,int startIndex,int gap)
{
int i = 0;
int j = 0;
int temp = 0; // Temporary variable for swap
for (i = startIndex + gap; i < numbersSize; i = i + gap)
{
j = i;
while (j - gap >= startIndex && numbers[j] < numbers[j - gap])
{
temp = numbers[j];
numbers[j] = numbers[j - gap];
numbers[j - gap] = temp;
j = j - gap;
}
}
}
void ShellSort(int numbers[],int gapValues[],int numGaps)
{
for (int i = 0; i < numGaps; i++)
{
int gapValue = gapValues[i];
for (int j = 0; j < gapValue; i++)
{
insertionSortInterleaved(numbers,numbersSize,i,gapValue);
}
}
}
解决方法
可能只是因为您需要将 j - gap 包裹在括号中,否则运算符优先级与您想要的不同。像这样:
while ( (j - gap) >= startIndex && numbers[j]
此外,似乎添加 (j-gap) 是有效范围的检查也很有意义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。