按升序排列数组
arranging array in ascending order
我正在尝试安排一个随机数组。在代码中,这只是按大小交换位置的第一步。当运行代码时,得到Debug Error,交换后的输出显示数组中的第一个数字被删除,最后一个是内存中的一个长随机数。看起来它是从i=1开始交换的,为什么?
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
void buildArray(int arr[], int size) {
srand ( (unsigned int)time(NULL) );
for(int i = 0; i < size; ++i)
arr[i] = rand() % 50 + 0;
}
void dispArray(int arr[], int size) {
for(int i = 0; i < size; ++i)
cout << i << ": " << arr[i] << endl;
}
int main()
{
const int size = 5;
int arr[size];
buildArray(arr, size);
dispArray(arr, size);
int swapHolder = -1;
for(int i = 0; i < size; ++i) {
if(arr[i] > arr[i+1]) {
swapHolder = arr[i+1];
arr[i+1] = arr[i];
arr[i] = swapHolder;
cout << endl;
}
}
dispArray(arr, size);
return 0;
}
Output example:
0: 46
1: 15
2: 47
3: 5
4: 19
0: 15
1: 46
2: 5
3: 19
4: -858993460
问题在这里:if(arr[i] > arr[i+1])
,你的for循环从[0, size - 1]
开始,所以在最后一次迭代中,让我们说size = 5
,你将测试if(arr[5] > arr[6])
,访问未初始化的arr[6]
,正确的方法是让你的for循环从[0, size - 2]
开始:
for(int i = 0; i < size - 1; ++i) ...
for(int i = 0; i < size; ++i) {
if(arr[i] > arr[i+1]) {
swapHolder = arr[i+1];
arr[i+1] = arr[i];
最后一次迭代用于i = size -1。
if(arr[i] > arr[i+1])
表示访问超出范围的数组。
相关文章:
- 在数组中输入 n 个整数的列表,并以类似于钟摆来回移动的方式排列它们. 输入-1 3 2 5 4,输出5 3 1 2 4
- 如何在不使用 C++ 中的数组或函数的情况下查找 N 位数字的所有排列
- C++按字母顺序排列的字符串数组
- 如何在 c++ 中按字母顺序排列数组中的字符串?
- 重新排列数组的行和列时出现问题
- 使用指针重新排列数组中的数字
- 排列 2D 数组中的元素
- 取消随机排列整数/字符数组
- 如何就地反转由数组表示的排列
- 大小 N 和 N 的所有排列不一定等于数组的大小
- 排列程序无法写入数组 - 运行时错误
- 使用特定位置重新排列数组的元素
- 如何检查 2D 数组在 c++ 中是否按升序排列?
- 如何通过C 中的另一个索引来重新排列数组
- 数组内存地址总是按最小到最大的顺序排列吗
- 重新排列数组的元素
- 排列 +ve 和 -ve 编号的数组,顺序不变
- 如何随机排列数组问题
- 对 C++ 中的数组执行随机排列
- 如何使C++函数返回 char 数组所有排列的向量