c语言
在排序中,为什么数组长度需要比实际长度扩大后,才能对所有元素进行排序
冒泡排列中升序,在主调函数中使用函数是我认为该写成 sort{a,6}
但显示结果为只对a数组的前4个进行排序,后两个没排序。
我把sort{a,6}改成sort(a, 10)这对a数组的全体元素(6个)进行了排序
# include<stdio.h>
void sort(int * a, int len)
{
int i, j, t;
for(i = 0; i<len-1; ++i)
{
for(j = 0; j<len-1-j; ++j)
{
if(a>a)
{
t = a;
a = a;
a = t;
}
}
}
}
int main(void)
{
int a={6, 5, 4, 3, 2, 1};
int i = 0;
sort(a,6);//在这里
for(i = 0; i<6; ++i)
{
printf("%d", a);
}
printf("\n ");
return 0;
}
我用的编译器是vc++6.0 # include<stdio.h>
void sort(int * a, int len)
{
int i, j, t;
for(i = 0; i<len-1; ++i)
{
for(j = 0; j<len-1-j; ++j) //j<len -1 - i才对吧
{
if(a>a)
{
t = a;
a = a;
a = t;
}
}
}
}
int main(void)
{
int a={6, 5, 4, 3, 2, 1};
int i = 0;
sort(a,6);//在这里
for(i = 0; i<6; ++i)
{
printf("%d", a);
}
printf("\n ");
return 0;
} 你的排序函数,内层循环的条件写错了。
for(j = 0; j<len-1-j; ++j)
循环结束条件应该是len-1-i,你写成了len-1-j
for(j = 0; j<len-1-i; ++j) 双向冒泡{:5_109:},可以看一下 #include<stdio.h>
void buble(int *a,int n)
{
int i,left = 0,right = n -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(void)
{
int len,i=0;
int a[] = {2,1,4,23,5,6,45,76,4,53,32,54,23,54,23,67,2,1,3,25,6,7,32};
len = sizeof(a) / sizeof(a);
buble(a,len);
while(a)
printf("%d ",a);
}
页:
[1]