指针数组总是从索引C 生成一个
Pointer array always generate one even out of index C++
algo.h
#ifndef _algorithm_
#define _algorithm_
namespace Sorting{
int *bubble(int *dataPass, int dataSize);
}
#endif
algo.cpp
#include "algorithm.h"
int *Sorting::bubble(int *dataPass, int dataSize){
for(int i = 0; i < dataSize; i++){
for(int j = 0; j < dataSize; j++){
cout<<dataPass[j+1]<<" < "<<dataPass[j]<<endl;
if(dataPass[j+1] < dataPass[j]){
int tmp = dataPass[j];
dataPass[j] = dataPass[j+1];
dataPass[j+1] = tmp;
}
}
}
return dataPass;
}
我想制作一个分类库,然后从气泡排序开始,显然我面临着一个问题。例如,我给出了属性datapass array [5] = {7,2,5,8,3} 和datasize 5.执行此功能后,返回的数组 1,2,3,5,7 我在哪里做错了?阵列没有1个,但分类显示1,我发现了8个被推到索引的5,所以我的数组变成了6,我不知道发生了什么。
问题是您的内部循环。您正在比较元素 j
和 j+1
,因此,如果dataSize为10,则当j
为9(可能是最后一个值时),您正在查看数组中的元素9和10,但是dataPass[10]
超出了数组的范围。这是一个简单的修复,只需更改循环即可...
for(int j = 0; j < dataSize-1; j++)
您正在使用两个循环,因此会导致错误。大小和索引未正确定义。小心尺寸和数组中的索引。
for(int i = 0; i < dataSize; i++){
for(int j = 0; j < dataSize-1; j++){
if(dataPass[j+1] < dataPass[j]){
int tmp = dataPass[j];
dataPass[j] = dataPass[j+1];
dataPass[j+1] = tmp;
}
}