我们有了选择法排序,现在我们将用它进行一个小规模的扩展,今天我们写一个插入函数,其中我们先用选择法对数组进行排序,再按照原顺序进行插入一个元素。
首先我们还是来展示一下我们的代码,这个代码的长度相比于前几篇的代码都要长一些。
#include <stdio.h>
void choic_arrage(int a[10])/*先通过选择法对数组元素进行排序*/
{
int i;
int j;
int k;
int temp;
for(i = 0; i < 10; i++)
{
k = i;
for(j = i+1; j < 10; j++)
{
if(a[k] > a[j])
{
k = j;
}
}
if(k != i)
{
temp = a[k];
a[k] = a[i];
a[i] = temp;
}
}
for(i = 0; i < 10; i++)
{
printf("%-3d",a[i]);
}
printf("\n");
}
int compare(int a[10],int n) /*输入要插入的数字,计算出它将插入的位置*/
{
int i;
for(i = 0; i < 10; i++)
{
if(i != 9)
{
if(a[i] < n && n < a[i+1])
{
return i+1;
}
}
else
{
printf("error!\n");
}
}
}
void insert(int a[10],int b[11],int m,int n) /*插入数字,并在数组b【11】中打印出来*/
{
int i;
for(i = 0; i < m; i++)
{
b[i] = a[i];
}
b[m] = n;
for(i = m; i < 10; i++)
{
b[i+1] = a[i];
}
for(i = 0; i < 11; i++)
{
printf("%-3d",b[i]);
}
printf("\n");
}
int main()
{
int a[10];
int b[11];
int i;
int n;
int m;
for(i = 0; i < 10; i++)
{
scanf("%d",&a[i]);
}
choic_arrage(a);
printf("please input n!\n");
scanf("%d",&n);
m = compare(a,n);
printf("%d\n",m);
insert(a,b,m,n);
return 0;
}
这次代码稍微长了一些,可能是我自己的思路有问题,如果大家有什么好的建议,请提出,我们互相学习互相进步。
下面将在Linux下编译运行这个程序。运行结果见下图: