代码本身不区分Windows和linux吧
就这次而言,length = 14
right = length = 14
第一次for循环 i = 13时执行循环体
array
array
array
但是并没有 array
因为length = 14
问题我也说了,代码你自己改吧
我有一个问题?你在linux下为什么是正确的?
难道是gcc的那个数组越界保护?
我不知道你是如何做到的
你不要告诉我是linux的版本不一样
之前的那个学习环境,我不小心弄没了,没办法在那试了(我没有必要在装一次了) 代码我也改好了
这样就行了吧?
人造人 发表于 2016-12-6 23:14
代码我也改好了
这样就行了吧?
确实是边界问题……大意了…… {:10_266:} 鸡尾酒算法其实很好,在保证对新手足够友好的情况下比冒泡快。
其中关于小甲鱼和人造人争论的问题我也试过了。
第一版的length=14确实是会出现array越界了,我测试了三个版本,win上的VS报错了,但是mac osx 上的终端的vim/gcc没报错正常运行,CentOS也正常运行,我猜测可能是高版本的gcc有某些越界保护的措施。
{:10_281:}{:10_281:}{:10_281:}I love gcc
{:10_261:} 4.20掌握双向排序即鸡尾酒排序
{:10_256:} {:10_250:} # include<stdio.h>
void croc(int array[],int length)
{
int i,tem,left = 0,right = length - 1;
while(left < right)
{
for(i = left; i < right;i++)
{
if(array > array)
{
tem = array;
array = array;
array = tem;
}
}
right --;
for(i = right;i > left; i --)
{
if (array < array )
{
tem = array;
array = array;
array = tem;
}
}
left ++;
}
}
int main(void)
{
int array[] = {73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109};
int i,legth;
legth = sizeof(array)/sizeof(array);
croc(array,legth);
for(i = 0;i < legth;i ++)
{
printf("%d ",array);
}
putchar('\n');
return 0;
} #include <stdio.h>
void buble(int a[],int len)
{
int i,left = 0,right = len - 1,tem;
while(left < right)
{
for(i = left;i < right;i ++)
{
if(a > a)
{
tem = a;
a = a;
a = tem;
}
}
right --;
for(i = right ;i > left;i--)
{
if(a > a)
{
tem = a;
a = a;
a =tem;
}
}
left ++;
}
}
int main()
{
int a[] = {3,4,2,54,2,6,3,47,4,23,5,23,87,5,76,34,23,4,6745,23,54,98};
int len,i;
len = sizeof(a) / sizeof(a);
buble(a,len);
for(i = 0;i < len;i++)
{
printf("%d ",a);
}
putchar('\n');
return 0;
} {:10_277:} 挺好 来了
1 这个10鱼币是怎么解锁的
页:
[1]
2