指针数组总是从索引C 生成一个

Pointer array always generate one even out of index C++

本文关键字:一个 数组 索引 指针      更新时间:2023-10-16

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

问题是您的内部循环。您正在比较元素 jj+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;
      }
    }
相关文章: