我有一个问题,代码对“tab”进行了良好的排序,返回了正确的结果,但是“tab2”却返回了错误的结果(7 6 4 0 4 1 3 1 5 6 6 7 8 9 9)。 不幸的是,我在代码中没有发现任何错误,一切看起来都是正确的。
#include <iostream>
void sort(int* begin, int* end) {
for (int* i = begin; i != end; ++i) {
//std::cout << *i<< std::endl;
for (int* j = i+1 ; j < end ; ++j) {
//std::cout << *(j - 1)<<" " << *j << std::endl;
if (*(j - 1) > *j) {
std::swap(*(j - 1), *j);
}
}
}
}
void write(int* begin, int size)
{
while (size > 0)
{
std::cout << *begin << ' ';
++begin;
--size;
}
}
int main()
{
int tab[10] = { 0, 9, 1, 3, 8, 2, 6, 7, 5, 4 };
sort(tab, tab + 10);
write(tab, 10);
std::cout << '\n';
int tab2[16] = { 9, 7, 8, 6, 5, 4, 4, 0, 9, 6, 7, 1, 6, 3, 1, -100 };
sort(tab2, tab2 + 15);
write(tab2, 15);
}
{ 3, 2, 1 }
。(您会注意到一旦将 3 移到正确的位置,就会忽略数组的第一个元素,即 2。出于巧合,您的交换顺序与第一个数组一起工作。) - molbdnilostd::array
,您将节省自己很多泪水。 - Brian61354270