当前位置: 代码迷 >> C语言 >> 一个使用插入排序的程序错误
  详细解决方案

一个使用插入排序的程序错误

热度:170   发布时间:2006-03-03 13:13:00.0
一个使用插入排序的程序错误
main()
{int a[10],i,j,temp;
printf("please input array number:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
printf("%2d,",a[i]);
printf("\n");
for(j=1;j<10;j++)
{i=j-1;
while(i>=0 &&a[j]<a[i])
{a[i+1]=a[i];
i--;
}
a[i]=a[j];
}
for(i=0;i<10;i++)
printf("%2d,",a[i]);
getch();
}
不知道怎么运行结果不对呢?
搜索更多相关的解决方案: 程序错误  

----------------解决方案--------------------------------------------------------
看下面的程序:其中a[0]用做哨岗

#include<stdio.h>
#include<conio.h>
int main(void)
{
int a[6]={0,5,4,9,2,1},i,j,k;
for(i=2;i<=5;i++) file://a[0] is temporary
{
if(a[i]<a[i-1]) file://current value less previous value
{
a[0]=a[i];
for(j=i-1;a[0]<a[j];j--)
a[j+1]=a[j]; file://record remove
a[j+1]=a[0];
}
}
for(k=1;k<=5;k++)
printf("%3d",a[k]); printf("\n");
getch();
return 0;
}
understand?
----------------解决方案--------------------------------------------------------
int charu(int n,int x,int*P)
{int i,j;
n=*p;
if((i<1)||i>(n+1))
return (0);
else
for(j=n;j>=i;j--)
a[j]=a[j-1];
a[j]=x;
*p=++n;
return (1);
}
----------------解决方案--------------------------------------------------------
以下是引用血刃在2006-3-3 16:52:00的发言:
int charu(int n,int x,int*P)
{int i,j;
n=*p;
if((i<1)||i>(n+1))
return (0);
else
for(j=n;j>=i;j--)
a[j]=a[j-1];
a[j]=x;
*p=++n;
return (1);
}

确实用拼音起个名字挺怪的(在程序里),建议还是多使用英文,手边放个字典也行。你看这函数名读出来。。

[此贴子已经被作者于2006-3-3 16:53:47编辑过]


----------------解决方案--------------------------------------------------------

a[i]和a[j]交换值时,应当借助一个temp变量,这样才不会把原来的值丢失!例如:
temp=a[i];
a[i]=a[j];
a[j]=temp;
这样a[i]原来的值才能放到a[j]里!


----------------解决方案--------------------------------------------------------
谢谢楼上的各位.
----------------解决方案--------------------------------------------------------

你的程序改成如下就行啦,红色部分是添加的或者修改的

#include <iostream>
#include <conio.h>

void main()
{
int a[10],i,j,temp;
printf("please input array number:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
printf("%2d,",a[i]);
printf("\n");
for(j=1;j<10;j++)
{
temp=a[j];
i=j-1;
while(i>=0 &&temp<a[i])
{
a[i+1]=a[i];
i--;
}
a[i+1]=temp;
}
for(i=0;i<10;i++)
printf("%2d,",a[i]);
getch();
}


----------------解决方案--------------------------------------------------------
而且你定义的temp都没用到哦~
----------------解决方案--------------------------------------------------------
  相关解决方案