第一个程序:有bug,但没发现
/*
Name:
Copyright:
Author:
Date: 31/07/17 11:42
Description:
【程序39】题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
1. 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,
插入后此元素之后的数,依次后移一个位置。
?
*/
#include int main()
{
int a[100],temp,i,j,n,min;
int x,temp2;
/*输入待排序数据*/
printf("请输入待排序的数的个数:");
scanf("%d",&n);
printf("\n请输入%d个数:",n);
for(i = 0;i < n;i++)
{
scanf("%d",&a[i]);
}
printf("\n");
/*排序*/
for(i = 0;i < n - 1;i++)
{
min = i;
for(j = i + 1;j < n;j++)
{
if(a[min] > a[j])
{
min = j;
}
}
temp = a[i];
a[i] = a[min];
a[min] = temp;
}
/*输出排序*/
printf("从小到大排序后的%d个数为:\n",n);
for(i = 0;i < n;i++)
{
printf("%-5d",a[i]);
}
printf("\n\n");
/*插入*/
while(printf("请输入插入数据:") && scanf("%d",&x) != EOF)
{
printf("\n");
n++;
if(x >= a[n - 2])
{
a[n - 1] = x;
printf("从小到大排序后的%d个数为:\n",n);
for(i = 0;i < n;i++)
{
printf("%-5d",a[i]);
}
printf("\n\n");
}
else
{
for(i = 0;i < n - 2;i++)
{
if(x < a[i])
{
temp = a[i];
a[i] = x;
for(j = i + 1;j < n;j++)
{
temp2 = a[j];
a[j] = temp;
temp = temp2;
}
break;
}
}
printf("从小到大排序后的%d个数为:\n",n);
for(i = 0;i < n;i++)
{
printf("%-5d",a[i]);
}
printf("\n\n");
}
}
return 0;
}
运行结果:
第二个程序:没有仔细测试
/*
Name:
Copyright:
Author:
Date: 31/07/17 11:42
Description:
【程序39】题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
1. 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,
插入后此元素之后的数,依次后移一个位置。
?
*/
#include #includeint cmp(const void *a,const void *b)
{
return (*(int *)a-(*(int *)b));//从小到大
}
int main()
{
int a[100],temp,i,j,n,min;
int x,temp2;
/*输入待排序数据*/
printf("请输入待排序的数的个数:");
scanf("%d",&n);
printf("\n请输入%d个数:",n);
for(i = 0;i < n;i++)
{
scanf("%d",&a[i]);
}
printf("\n");
/*排序*/
qsort(a,n,sizeof(int),cmp);
/*输出排序*/
printf("从小到大排序后的%d个数为:\n",n);
for(i = 0;i < n;i++)
{
printf("%-5d",a[i]);
}
printf("\n\n");
/*插入*/
printf("请输入插入数据:");
scanf("%d",&x);
a[n] = x;
qsort(a,n + 1,sizeof(int),cmp);
printf("\n从小到大排序后的%d个数为:\n",n + 1);
for(i = 0;i < n + 1;i++)
{
printf("%-5d",a[i]);
}
printf("\n\n");
return 0;
}