c语言作业已有一个已排好序的数组,C语言——实例039 有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中...

这篇博客介绍了两个C语言程序,用于处理已排序数组。程序读取用户输入的排序数组,然后按顺序插入新的数值。第一个程序通过循环实现排序和插入,可能存在bug。第二个程序使用了`qsort`函数进行快速排序,插入后再次调用`qsort`以保持排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一个程序:有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;

}

运行结果:

f77e2bf9215ad1159130a25f19c73e68.png

第二个程序:没有仔细测试

/*

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值