作者OPIV (稻草人)
看板C_and_CPP
标题[问题] gnome sort
时间Wed Nov 11 13:03:59 2015
以下是我对 gnome sort 的实作
和网路上找得到的范例都几乎相同
但是遇到某些输入时,它就会变成一个无法结束的演算法
当传入的 array length > 100的时候就很容易遇到,数字用乱数给 (rand() % 10000)
但是如果长度在60以下却又从来没发生过这问题
用 xcode 来 debug 会发现这些输入都会让 i 一直在一个区间里来来回回,但是阵列内
容却没有改变
有试过直接复制别人的算法,一样也都有这个问题
很好奇这麽久了都没人发现吗?
template <typename T>
void gnome_sort(T* array, size_t length)
{
for(size_t i = 0; i < length; )
{
if((i == 0) || (array[i] > array[i - 1]))
i++;
else
{
T tmp = array[i - 1];
array[i - 1] = array[i];
array[i] = tmp;
i--;
}
}
}
主程式
int main(void)
{
int* array = (int*)malloc(sizeof(int) * 100);
srand(time(NULL));
for(size_t i = 0; i < 100; i++)
array[i] = rand() % 10000;
gnome_sort<int>(array, 100);
for(size_t i = 0; i < 100; i++)
std::cout << array[i] << " ";
std::cout << std::endl;
free(array);
return 0;
}
感谢各位~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 49.218.98.20
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1447218242.A.125.html
1F:推 ZanFu5566: 应该要>= 就i++吧?11/11 13:23
2F:→ ZanFu5566: 这样愈到两个一样的连续数值会无穷回圈11/11 13:23
真的是这个问题
真的太北七了抱歉XDD…
※ 编辑: OPIV (49.218.98.20), 11/11/2015 14:42:40