有关数组数组排序的问题
大家好,我在写这道题时出错了,要求是输入一个数,按排序规律将它插入数组中,从小到大,请知道的人帮忙解答
- C/C++ code
//输入一个数后按排序规律将它插入数组中#include <Stdio.h>void main(){ int a[11]={1,10,20,30,40,50,60,70,80,90}; int i,j,num; printf("原来的数:"); for(i=0; i<10; i++) { printf("%d ",a[i]); } printf("\n"); printf("请插入一个数:"); scanf("%d",&num); if(num>a[9]) { a[10]=num; } else { for(i=0; i<10; i++) { if(a[i]>num) { for(j=9; j>=i; j--) { a[j+1]=a[j]; a[i]=num; break; } } } } printf("插入后:"); for(i=0; i<11; i++) { printf("%d ",a[i]); } printf("\n");}[解决办法]
for(i=0; i<10; i++)
{
if(a[i]>num)
{
for(j=9; j>=i; j--)
{
a[j+1]=a[j];
//break;
}
a[i]=num;
break;
}
}
[解决办法]
- C/C++ code
#include <Stdio.h>void main(){ int a[11]={1,10,20,30,40,50,60,70,80,90}; int i,j,num; printf("原来的数:"); for(i=0; i<10; i++) { printf("%d ",a[i]); } printf("\n"); printf("请插入一个数:"); scanf("%d",&num); if(num>=a[9]) { a[10]=num; } else { for(i=0; i<10; i++) { if(a[i]>num) { for(j=9; j>=i; j--) { a[j+1]=a[j]; } a[i]=num; break; //这加break; } } } printf("插入后:"); for(i=0; i<11; i++) { printf("%d ",a[i]); } printf("\n");}
[解决办法]
[code=C/C++][/code]
//输入一个数后按排序规律将它插入数组中
#include <Stdio.h>
int main()
{
int a[11]={1,10,20,30,40,50,60,70,80,90};
int i,j,num;
printf("原来的数:");
for(i=0; i<10; i++)
{
printf("%d ",a[i]);
}
printf("\n");
printf("请插入一个数:");
scanf("%d",&num);
if(num>a[9])
{
a[10]=num;
}
else
{
for(i=0; i<10; i++)
{
if(a[i]>num)
{
for(j=9; j>=i; j--)
{
a[j+1]=a[j];
//break;
}
a[i]=num; //这个赋值放到for循环外面
break; //break跳出for循环
}
}
}
printf("插入后:");
for(i=0; i<11; i++)
{
printf("%d ",a[i]);
}
printf("\n");
system("PAUSE");
return 0;
}
[解决办法]
for(j=9; j>=i; j--)
{
a[j+1]=a[j]; //将所有比输入的数据大的后移
}
a[i]=num; //写入,完事,退出
break; //这加break;
[解决办法]
- C/C++ code
#include <Stdio.h>void main(){ int a[11]={1,10,20,30,40,50,60,70,80,90}; int i,j,num; printf("Ô­À´µÄÊý:"); for(i=0; i<10; i++) { printf("%d ",a[i]); } printf("\n"); printf("Çë²åÈëÒ»¸öÊý:"); scanf("%d",&num); if(num>a[9]) { a[10]=num; } else { for(i=0; i<10; i++) { if(a[i]>num) { for(j=9; j>=i; j--) a[j+1]=a[j]; a[i]=num; break; } } } printf("²åÈëºó:"); for(i=0; i<11; i++) { printf("%d ",a[i]); } printf("\n");}
[解决办法]
2楼正解!
- C/C++ code
#include <Stdio.h>void main(){ int a[11]={1,10,20,30,40,50,60,70,80,90}; int i,j,num; printf("原来的数:"); for(i=0; i<10; i++) { printf("%d ",a[i]); } printf("\n"); printf("请插入一个数:"); scanf("%d",&num); if(num>=a[9]) { a[10]=num; } else { for(i=0; i<10; i++) { if(a[i]>num) { for(j=9; j>=i; j--) { a[j+1]=a[j]; } a[i]=num; break; //这加break; } } } printf("插入后:"); for(i=0; i<11; i++) { printf("%d ",a[i]); } printf("\n");}
[解决办法]
楼主的意思是不是应该是这样的:把插入的数按照排序规则插到已有的数组里面?
我觉得我这个办法还是比较好的:就是定义数组的时候为要插入得数留下的一个元素的位置。然后把插入得数赋值给这个a[11],最后对整个的数组元素按照排序规则排序,输出。代码如下,已调试,可运行:
#include <Stdio.h>
void main()
{
int a[11]={1,10,20,30,40,50,60,70,80,90};
int i,j,temp;
printf("The original numbers are:");
for(i=0; i<10; i++)
{
printf("%d ",a[i]);
}
printf("\n");
printf("Input one number please:");
scanf("%d",&a[10]);
for(i=0;i<10;i++)
{
for(j=i+1;j<11;j++)
{
if(a[i]>a[j])
{temp=a[i];a[i]=a[j];a[j]=temp;}
}
}
for(i=1;i<11;i++)
{printf("%d ",a[i]);}
printf("\n");
}
[解决办法]
- C/C++ code
//插入排序算法insertsort(int a[],int n){ int i,j; int temp; for(i=1; i<n; i++) { j=i; temp=a[i]; while(j>0 && temp < a[j-1]) { a[j]=a[j-1]; j--; } A[j]=temp; }