我是cpp语言的新手。我试图解决插入排序问题。但是,向在线裁判提交时出现演示错误。在程序中,我必须在插入排序的每个步骤的一行中显示中间顺序。到目前为止,这是我的代码:
void InsertionSort(int *arr, int n)
{
for (int i = 1; i < n; i++)
{
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key)
{
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
for (int k = 0; k < n; k++)
cout << arr[k] << " ";
cout << endl;
}}
输出:
1 2 3<Here is space.want to remove it>
1 2 3<Here is space.want to remove it>
谢谢。
答案 0 :(得分:1)
不要std::cout << arr[k] << ' '
的所有n
元素。将其应用于除最后一个之外的每个。然后,输出该元素,但不要在其后跟空格,而要在其后跟'\n'
或std::endl
,最好是前一个:
for (int k = 0; k < n - 1; k++)
cout << arr[k] << " ";
cout << arr[n - 1] << '\n';
在n - 1
循环条件下,注意n
而不是for()
。这会将主体应用于除最后一个元素之外的所有元素。
然后,我们需要以不同的方式对待最后一个元素(由第n - 1
个索引表示)-我们不想在后跟" "
的情况下打印它,但是请换行。这就是为什么我们这样做<< '\n';
。请注意,std::endl
也可以使用,但这不是必需的。我鼓励您阅读有关std::endl
vs '\n'
的信息。