2个结果一致的取余运算写在数组 [ ] 最终数组结果却不同
本帖最后由 ing 于 2020-2-7 15:19 编辑while 循环一共会执行 4次,每次变量 w、x 都是一样的
然而 temp[(k-1)%len 的写法结果和 temp[(k-1+len)%len 的结果最终却不同??
```
#include<stdio.h>
void insert(int arr[],int temp[],int len)
{
temp = arr;
int final = 0,first = 0;
for (int i = 1; i < len; ++i) {
//比最小元素小
if (arr < temp)
{
first = (first - 1 + len) % len;
temp = arr;
}
//比最大元素大
else if (arr > temp)
{
final = (final + 1 + len) % len;
temp = arr;
}
//比最小元素大,比最大元素小
else
{
int k = (final + 1 + len) % len;
//当插入值比当前值小时,需要移动当前值的位置
// while (arr < temp[(k-1)%len])
while (arr < temp[(k-1+len)%len])
{
int w = (k-1+len)%len;
int x = (k-1)%len;
// temp[(k + len) % len] = temp[(k - 1) % len];
temp[(k + len) % len] = temp[(k - 1 + len) % len];
k = (k - 1 + len) % len;
}
temp[(k + len) % len] = arr;
final = (final + 1 + len) % len;
}
}
for (int j = 0; j < len; ++j) {
arr = temp[(first + j) % len];
}
}
int main(int argc, char* argv[])
{
int a = {3,1,7,5,2,4,9,6};
int temp;
insert(a,temp,8);
for (int i = 0; i < 8; ++i) {
printf("%d ",a);
}
return 0;
}
``` 不知道你写的什么,但是w,x并没有写到数组里 整个”块状“移动而不是单个元素移动 本帖最后由 我的爱是你 于 2020-2-7 14:30 编辑
temp // temp // temp[-1] ?
temp[(k - 1+8)% 8] // temp[(0 - 1+8)% 8] //temp ?
经过调试他俩并不相同 ,在 k=0 时数组就会出问题。
第二种写法更为安全
。。。。。。。。。。。。。。。。
你所谓的结果相同不过是前几次循环罢了
页:
[1]