本帖最后由 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[0] = arr[0];
int final = 0,first = 0;
for (int i = 1; i < len; ++i) {
//比最小元素小
if (arr[i] < temp[first])
{
first = (first - 1 + len) % len;
temp[first] = arr[i];
}
//比最大元素大
else if (arr[i] > temp[final])
{
final = (final + 1 + len) % len;
temp[final] = arr[i];
}
//比最小元素大,比最大元素小
else
{
int k = (final + 1 + len) % len;
//当插入值比当前值小时,需要移动当前值的位置
// while (arr[i] < temp[(k-1)%len])
while (arr[i] < 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[i];
final = (final + 1 + len) % len;
}
}
for (int j = 0; j < len; ++j) {
arr[j] = temp[(first + j) % len];
}
}
int main(int argc, char* argv[])
{
int a[8] = {3,1,7,5,2,4,9,6};
int temp[8];
insert(a,temp,8);
for (int i = 0; i < 8; ++i) {
printf("%d ",a[i]);
}
return 0;
}
|