ing 发表于 2020-2-7 11:06

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;
}

```

~零度 发表于 2020-2-7 11:30

不知道你写的什么,但是w,x并没有写到数组里

HighBox 发表于 2020-2-7 12:27

整个”块状“移动而不是单个元素移动

我的爱是你 发表于 2020-2-7 12:56

本帖最后由 我的爱是你 于 2020-2-7 14:30 编辑

temp       //    temp               // temp[-1]    ?
temp[(k - 1+8)% 8]   //   temp[(0 - 1+8)% 8]    //temp   ?
经过调试他俩并不相同 ,在 k=0 时数组就会出问题。
第二种写法更为安全

。。。。。。。。。。。。。。。。

我的爱是你 发表于 2020-2-7 13:00

你所谓的结果相同不过是前几次循环罢了
页: [1]
查看完整版本: 2个结果一致的取余运算写在数组 [ ] 最终数组结果却不同