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,我不知道发生了什么。
答案 0 :(得分:0)
问题在于你的内循环。您正在比较元素j
和j+1
,所以如果dataSize为10,例如j
为9(它可能是最后一个值),那么您正在查看元素9和10中的元素你的数组,但dataPass[10]
超出了数组的范围。这是一个简单的修复,只需将循环更改为此...
for(int j = 0; j < dataSize-1; j++)
答案 1 :(得分:0)
您正在使用两个循环,因此导致错误。大小和索引未正确定义。小心数组中的大小和索引。
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;
}
}