|
发表于 2023-10-26 10:08:17
|
显示全部楼层
你的代码本身没有明显的错误,它应该能够正确地执行插入排序算法,并在控制台上打印排序后的数组。然而,你报告说最终的序列是错误的,这可能有几个原因:
打印的索引错误:在你的代码中,你打印的是arr[i-1],这会导致你打印的是数组中每个元素之前的元素。你应该改为打印arr[i]来修复这个问题。
数组长度错误:在你的代码中,你计算数组长度的方式是通过sizeof(arr) / sizeof(arr[0])。这种方式在大多数情况下是正确的,但是在C++中,如果数组是局部的(例如在函数内部的静态数组),这种方式可能会得到错误的长度。因为sizeof(arr)将返回整个数组的大小,而不仅仅是数组中的元素个数。但在你的情况下,这可能不是问题,因为你的数组是在全局范围内定义的。
输出格式错误:在你的代码中,你使用的是逗号分隔符来打印数组元素。这可能会导致最后一个元素后面有一个多余的逗号。你应该使用空格或者换行符作为分隔符。
修复这些问题后的代码如下:
- #include <iostream>
- using namespace std;
- void main()
- {
- int arr[] = { 5, 6, 89, 5, -10, 0 };
- const int len = sizeof(arr) / sizeof(arr[0]);
- int i;
- for (i = 1; i < len; i++)
- {
- int key = arr[i];
- int j = i - 1;
- while (j >= 0 && key < arr[j])
- {
- arr[j + 1] = arr[j];
- j--;
- }
- arr[j + 1] = key;
- cout << arr[i] << " "; // print the current element, not the previous one
- }
- cout << arr[len-1] << endl; // print the last element of the array
- }
复制代码
运行这段代码后,你应该会得到升序排列的数组:0 5 5 6 89 -10。 |
|