归并排序c++实现脱界索引访问
mergesort c++ implementation out of bound index accessing
我正在c++中实现CLRS算法教科书中的合并排序伪代码。在代码的某个地方,我访问了一个不在数组边界内的数组元素。我不确定为什么会发生这种情况(它发生在左==数组的大小-1,中间==左,右==数组的大小)。我很感激你的帮助。这是我的实现。
void merge(int array[], int left, int middle, int right) {
int left_size = middle - left + 1; //include middle
int right_size = right - middle;
int *left_array = new int[left_size];
int *right_array = new int[right_size];
for (int i = 0; i < left_size; i++)
left_array[i] = array[left + i];
for (int i = 0; i < right_size; i++)
right_array[i] = array[middle + i + 1];
int i = 0;
int j = 0;
int cur = left;
printArray(left_array, left_size);
printArray(right_array,right_size);
while (i < left_size and j < right_size) {
if (left_array[i] < right_array[j])
array[cur] = left_array[i++];
else
array[cur] = right_array[j++];
cur++;
}
while (i < left_size) {
array[cur] = left_array[i++];
cur++;
}
while (j < right_size) {
array[cur] = right_array[j++];
cur++;
}
delete [] left_array;
delete [] right_array;
}
我是这样调用合并函数的:
void mergeSort(int array[], int length) {
mergeSortHelper(array, 0, length);
}
//left inclusive, right exclusive
void mergeSortHelper(int array[], int left, int right) {
if (left < right) {
int middle = floor((left + right) / 2);
mergeSortHelper(array, left, middle);
mergeSortHelper(array, middle + 1, right);
merge(array, left, middle, right);
}
}
开头:
mergeSortHelper(array, 0, length);
将导致使用array[length]
。array [length-1]
是最后一个有效的引用。
如果你以:
开头可能效果更好。mergeSortHelper(array, 0, length-1);
相关文章:
- 编译器(Visual C++)如何优化按索引访问矢量元素?
- 如何通过索引访问枚举类
- 通过索引访问 rapidjson::D ocument array
- 可以使用整数索引访问向量元素吗?
- 从对象创建矢量包装器,该对象只允许使用索引访问向量
- 如何使用索引访问C 结构属性值
- 字符串中消失的字符,但使用索引访问
- 是否可以使用 1D 索引访问 C++ 2D int 数组
- 提升图形库:获取edge_descriptor或通过 int 类型的索引访问边缘
- 在运行时按索引访问 std::tuple 元素的最佳方法
- 使用枚举作为索引访问 2D 向量
- 通过索引访问矢量的速度:向后与向前
- 是否可以使用负索引访问二维数组
- C++中基于类矩阵结构的索引访问
- 直接索引访问与"high"内存使用量相比的理论影响是什么? "shifted"使用"low"内存使用情况的索引访问?
- 增强对哈希唯一索引的多索引访问
- C++ STL 向量迭代器与索引访问和线程安全
- 如何通过索引访问 boost::multi_index::multi_index_container<> 的所有元素?
- 向量索引访问与迭代器访问的效率
- 具有唯一元素和按索引访问的容器