(冒泡排序)小弟我已经编出来了,但是不知道哪里出有关问题了
(冒泡排序)我已经编出来了,但是不知道哪里出问题了。
冒泡排序的程序:
#include<stdio.h>
#define N 10
int main(void)//冒泡排序
{
int a[N]={1,3,2,-10,-90,100,78,65,88,2};
int i,j,k,t;
for(i=0;i<N;i++)
for(j=0;j<N-i;j++)
{
if(a[j]>a[j+1])
{
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
}
for(k=0;k<N;k++)
printf("%d ",a[k]);
return 0;
}
没有语法错误,其他数字都能排序好,就是100这个数字牌不好,请问我的问题出哪里了,谢谢。
------解决方案--------------------
i=0时,j=9,那么j+1=10了越界了,改成j<N-i-1试下
------解决方案--------------------
------解决方案--------------------
++,就是这种情况,数组溢出了
------解决方案--------------------
冒泡排序的程序:
#include<stdio.h>
#define N 10
int main(void)//冒泡排序
{
int a[N]={1,3,2,-10,-90,100,78,65,88,2};
int i,j,k,t;
for(i=0;i<N;i++)
for(j=0;j<N-i;j++)
{
if(a[j]>a[j+1])
{
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
}
for(k=0;k<N;k++)
printf("%d ",a[k]);
return 0;
}
没有语法错误,其他数字都能排序好,就是100这个数字牌不好,请问我的问题出哪里了,谢谢。
------解决方案--------------------
i=0时,j=9,那么j+1=10了越界了,改成j<N-i-1试下
------解决方案--------------------
------解决方案--------------------
++,就是这种情况,数组溢出了
------解决方案--------------------
- C/C++ code
for(i=0;i<N-1;i++) for(j=0;j<N-i-1;j++)
------解决方案--------------------
for(j = 0; j < N - i; j++)
{
if(a[j] > a[j+1])
{
t = a[j+1];
a[j+1] = a[j];
a[j] = t;
}
}
内部的for循环,当j的值为9时,if语句比较a[9]和a[10],此时a[10]已经是数组越界。
所以a[10]的值是未定义的,很可能是-858993460之类的值,所以a[9]的值大于a[10],
最终a[9]被替换成了一个未定义的值。
------解决方案--------------------
- C/C++ code
#include<stdio.h> #define N 10 int main(void) { int a[N] = {1, 3, 2, -10, -90, 100, 78, 65, 88, 2}; int i, j, k, t; //冒泡排序 for(i = 0; i < N - 1; i++) { for(j = 0; j < N - i - 1; j++) { if(a[j] > a[j+1]) { t = a[j+1]; a[j+1] = a[j]; a[j] = t; } } } for(k = 0; k < N; k++) { printf("%d ", a[k]); } return 0; }