首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言一个排序的小疑点,求帮助解惑

2012-03-27 
C语言一个排序的小问题,求帮助解惑[codeC/C++][/code]#includestdio.hvoid Print(int a[],int length)

C语言一个排序的小问题,求帮助解惑
[code=C/C++][/code]#include<stdio.h>
void Print(int a[],int length);
void sort(int a[],const int length){
int i,j,temp;
for(i=0;i<length-1;i++){
for(j=0;j<length-i+1;j++){
if(a[j]>a[j+1]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
//a[j] = a[j]+a[j+1];
//a[j+1] = a[j]-a[j+1];
//a[j] = a[j]-a[j+1];
}
}
}
}
void Print(int a[],int length){
int i=0;
for(;i<length;i++)
printf("%d ",a[i]);
printf("\n");
}



int main(){
 int array[5];
int x,i=0,n=0;
for(;i<5;i++){
scanf("%d",&x);
array[i] = x;
n++;
}

printf("before sort:\n");
Print(array,n);

sort(array,n);

printf("after sort:\n");
Print(array,n);

printf("\n");
return 0;



}







[解决办法]
for(i=0;i<length-1;i++){
for(j=0;j<length-i+1;j++){
if(a[j]>a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
当i=0时,就会有j=length+1,而a[length+1]是越界的(大于数组本身定义的长度),就是本身你的数组长度为5,但是会出现比较a[5]或a[6];会出现缓冲区溢出的现象。
改正方法:没细细看,只是将 j<length-i+1改成j<length。逐位比较。
望对你有用!

热点排行