【发布时间】:2017-07-09 18:56:28
【问题描述】:
void sort(int values[], int n)
{
int smallestSpot = 0;
for (long long i = 0; i < n ; i++)
{
int smallest = values[i];
for(long long j = i; j < n - i ; j++) //find the smallest int in array
{
if(values[j] < smallest)
{
smallestSpot = j;
smallest = values[j];
}
}
values[smallestSpot] = values[i];
values[i] = smallest;
}
return;
}
我的排序算法覆盖了第一个数字,我不知道为什么,请帮忙。谢谢。
【问题讨论】:
-
你是用调试器单步调试的,还是通过打印出来检查变量?
-
long long j = i;-->long long j = i + 1; -
@cᴏʟᴅsᴘᴇᴇᴅ 我原来就是这样,但它没有用
-
还有
j < n - i-->j < n -
在进入第二个循环之前添加这一行
smallestSpot = i。考虑索引0处的元素最小的情况,而索引1处的下一个最小的情况是,当i=1和刚刚完成内部for循环后,索引0处的元素将被索引1处的元素覆盖。因为samllestSpot是0。此外,不需要使用long long int来索引数组,数组中的元素数量n本身就是int。