指针数组总是在索引C ++中生成一个偶数

时间:2017-03-08 11:19:30

标签: c++ arrays pointers

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,我不知道发生了什么。

2 个答案:

答案 0 :(得分:0)

问题在于你的内循环。您正在比较元素jj+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;
      }
    }