输入五个数字,从小到大排序,排序好了然后再提示输入一个数字,重新排序!~~我已写好一种办法```有没有其他更好的办法??
#include<stdio.h>
#define N 5
#define Z 6
void main()
{
int i,num[Z],t,k,p=0;
char yorn;
printf("请输入%d个数字:\n",N);
for(i=0;i<N;i++)//此循环是用来输入N个数的
{
scanf("%d",&num[i]);
}
for(k=0;k<N-1;k++)//此嵌套循环运用冒泡排序排列数字
{
for(i=0;i<N-1-k;i++)
{
if(num[i]<num[i+1])
{
t=num[i];
num[i]=num[i+1];
num[i+1]=t;
}
}
}
printf("\n排序后:\n");
for(i=0;i<N;i++)//此循环为了显示排序后的数字
{
printf("%d\n",num[i]);
}
printf("\n是否要插入一个数(y or n):\n");
fflush(stdin);
scanf("%c",&yorn);
if (yorn!='y' && yorn!='n')//此if语句询问是否要插入一个数字
printf("输入错误,请输入y或者n!!!");
else if(yorn=='y')//选择y插入数字,否则退出程序
{
printf("请插入一个数:");
scanf("%d",&p);
for(i=0;i<N;i++)/*因为之前的数字已排列好,所以通过将插入的数字按顺序与他们进行比较
就可以得出该插入的数字应该插在哪个地方*/
{
if(p>num[i])
break;
}
for(k=N;k>i;k--)/*当已经找出插入位置,该循环可以使其位置以及后面的数字往后移动
使得该数可以从适当的位置插入*/
{
num[k]=num[k-1];
}
num[i]=p;
printf("\n插入后再排序:\n");
for(i=0;i<Z;i++)
{
printf("%d\n",num[i]);
}
}
else
printf("\n\n\n\n");
}
----------------解决方案--------------------------------------------------------
初步看来,用折半查找后插入即可~~~~~~~~~~~
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------
#include<stdio.h>
main()
{
int a[80],i,j,key,n,t;
key=t=0;
for(i=0;i<5;i++){
scanf("%d",&a[i]);
}
for(i=0;i<5;i++){
for(j=0;j<4;j++){
if(a[j]>a[j+1]){
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
scanf("%d",&n);
for(i=0;i<5;i++){
if(n<a[i]){
key=i;
break;
}
}
for(i=0;i<key;i++){
printf("%d ",a[i]);
}
printf("%d ",n);
for(i=key;i<5;i++){
printf("%d ",a[i]);
}
}
----------------解决方案--------------------------------------------------------