b[1]为什么变为0了

不要绝望总会慢慢变强 2018-06-08 11:15:09
void shellsort(int *a, int n)
{
static int b[10];
int gap = n/2;
int i;
while (gap>= 1)
{
int m = 0;
cout <<"gap等于" << gap << "时的序列为:";
for (i = 0; i <= n-gap; i += gap)
{
b[i] = a[i];
m++;
cout << b[i] << " "; //这里b[0]=100,b[1]=8

}
cout << b[0] << " " << b[1] << endl; //这里b[0]=100,b[1]=0????????
if (m == 2)
{
if (b[1] < b[0])
{
int h;
h = b[0];
b[0] = b[1];
b[1] = h;

}
}
else
{
for (int k = 2; k < m; k++)
{
int t = b[k];
int low = 0;
int high = k - 1;
int mid = low + (high - low) / 2;
while (low <= high)
{
if (t>b[mid])
low = mid + 1;
else
high = mid - 1;

}
for (int c = k - 1; c > low; c++)
b[c] = b[c - 1];
b[low] = t;
}
}
cout << "排序后的序列为:";
for (int i = 0; i < m; i++)
{

cout << b[i] << " ";

}
for (int i = 0; i < n - gap; i += gap)
a[i] = b[i];
gap = gap / 2;
}

for (int i = 0; i < n; i++)
cout << a[i] << " ";
}
int main(){

int a[] = { 100, 5, 3, 1, 8, 7, 2, 4 };
int n = sizeof(a) / sizeof(int);
cout << "原数组为:";
for (int i = 0; i < n; i++)
cout << a[i] << " ";
shellsort(a, n);
return 0;
}
...全文
550 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
对,写错了,不过主要是上边问号地方
啊大1号 2018-06-09
  • 打赏
  • 举报
回复
引用 2 楼 luoshiyong123 的回复:
对,写错了,不过主要是上边问号地方
注意你的for循环for (i = 0; i <= n - gap; i += gap),gap为4,是以4递增。所以 //这里b[0]=100,b[4]=8 而不是b[1]=8
赵4老师 2018-06-09
  • 打赏
  • 举报
回复
判断是否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。
#include <time.h>
#include <stdlib.h>
#include <windows.h>
int main() {
    int a,b[11];//本来是b[10],为判断哪句越界,故意声明为b[11]

    srand((unsigned int)time(NULL));//按两次F11,等黄色右箭头指向本行时,调试、新建断点、新建数据断点,地址:&b[10],字节计数:4,确定。
    while (1) {//按F5,会停在下面某句,此时a的值为10,b[10]已经被修改为对应0..4之一。
        b[(a=rand()%11)]=0;
        Sleep(100);
        b[(a=rand()%11)]=1;
        Sleep(100);
        b[(a=rand()%11)]=2;
        Sleep(100);
        b[(a=rand()%11)]=3;
        Sleep(100);
        b[(a=rand()%11)]=4;
        Sleep(100);
    }
    return 0;
}
paschen 版主 2018-06-08
  • 打赏
  • 举报
回复
for (int c = k - 1; c > low; c++) 这句应该是: for (int c = k - 1; c > low; c--) 这样吧

64,671

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧