#include
#include
using namespace std;
//排序函数必有的交换函数
void swap(int& a, int& b)
{
int temp = a;
a = b;
b = temp;
}
//插入排序
void insertionSort(vector<int> &vec)
{
cout << vec[0] << endl;
for (int i = 0; i < vec.size(); i++) {
for (int j = i+1 ; j > 0 && vec[j]-1];j--) {//视角在右
swap(vec[j], vec[j - 1]);
}
}
}
int main() {
int arr2[] = { 7,5,7,6,2,4,8,10,11,15,9,2,1,2,3};
vector<int> vec(arr2, arr2 + sizeof(arr2) / sizeof(arr2[0]));
/*vec.reserve(100);*/
insertionSort(vec);
for (int i = 0; i < vec.size(); i++) {
cout << vec[i] << " ";
}
}
如图,当j=i的时候正确,j=i+1为什么就会报错?
请求大家帮忙解决一下我的苦恼!
万分感谢!
o(╥﹏╥)o
基于Monster 组和GPT的调写:
为了避免这种错误,可以在内层循环的条件中增加一个判断条件 j>0,确保 j-1 不会小于 0,即:
for (int j = i + 1; j > 0 && vec[j] < vec[j - 1]; j--) {
swap(vec[j], vec[j - 1]);
}
这样就可以避免访问数组左边界导致的错误了。