我遇到了问题,代码对“tab”进行了很好的排序,返回了正确的结果,但是“tab2”已经返回了错误的结果(7 6 4 0 4 1 3 1 5 6 7 8 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);
}
1条答案
按热度按时间cwtwac6a1#
你有两个循环,并且在比较和交换时只使用内层循环的索引,而经典的冒泡排序使用两个索引,外层索引的元素得到它后面的最大值。
因此,解决办法是:
或者,问题可能是内部循环的开始在最小值到达底部之前向前移动。如果在每次迭代之后打印列表,您可以清楚地看到这一点。在这种情况下,修复方法是不在外部循环的光标处开始内部循环,而是在第一个元素之后开始内部循环。