c语言 向有序数组中插入一个数,保持原顺序不变,将新数组输出

 我来答
爱教育爱学习
高粉答主

2019-10-26 · 学而不思则罔,思而不学则殆
爱教育爱学习
采纳数:384 获赞数:112732

向TA提问 私信TA
展开全部

#include"stdafx.h"

#include<stdio.h>

intmain()

{

intm,n,i,j,h;

inta[17]={1,5,9,14,23,34,45,56,67,78,89,99,105,126,156};

scanf("%d,%d",&m,&n);

for(i=0;i<15;i++)//这里i<16;改成i<15;因为插入前数组有15个元素

{

if(m<=a[i])//这里m<a[i]改成m<=a[i]

{

for(j=14;j>=i;j--)

a[j+1]=a[j];

a[i]=m;

break;//这里加break;插入m后退出循环

}

}

for(i=0;i<16;i++)

{

if(n<=a[i])//这里n<a[i]改成n<=a[i]

{

for(j=15;j>=i;j--)

a[j+1]=a[j];

a[i]=n;

break;//这里加break;插入n后退出循环

}

}

for(i=0;i<17;i++)//这里i<16;改成i<17;因为插入后数组有17个元素

printf("%d",a[i]);

return0;

}

扩展资料

C语言输出数组的每一个值

#include<stdio.h>

intmain()

{

inta[8]={0,1,2,3,4,5,6,7};

printf("%d---%d--%d--%d--%d--%d--%d--%d",a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7]);

return0;

}

前端小子
2019-08-18 · TA获得超过7653个赞
知道答主
回答量:109
采纳率:0%
帮助的人:1.7万
展开全部

C语言实现代码如下:

#include "stdio.h"

int main(void){

int a[10]={1,3,5,6,7,8,9},t=4,i;

for(i=6;i>=0;i--){

if(t>a[i]){

a[i+1]=t;

break;

}

a[i+1]=a[i];

}

for(i=0;i<8;printf("%d ",a[i++]));

printf("\n");

return 0;

}

扩展资料:

冒泡排序

从数组头部开始,不断比较相邻的两个元素的大小,让较大的元素逐渐往后移动(交换两个元素的值),直到数组的末尾。经过第一轮的比较,就可以找到最大的元素,并将它移动到最后一个位置。

第一轮结束后,继续第二轮。仍然从数组头部开始比较,让较大的元素逐渐往后移动,直到数组的倒数第二个元素为止。经过第二轮的比较,就可以找到次大的元素,并将它放到倒数第二个位置。

以此类推,进行 n-1(n 为数组长度)轮“冒泡”后,就可以将所有的元素都排列好。

参考资料来源:百度百科-C语言

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我已经匿名了
2013-12-08 · TA获得超过816个赞
知道小有建树答主
回答量:478
采纳率:0%
帮助的人:245万
展开全部
#include <stdio.h>
//下两个函数中的参数order若为'u',表示数组升序排列,为'd',表示降序排列
//a是整形数组,n为数组大小(末尾元素下标+1)
void  sortIntArr(int a[], int n, char order); //对数组a中前n个元素排序
int   insertArr(int x, int a[], int n,  char order);//插入x到数组a(n个元素)中,仍保持原顺序
void  printIntArr(int a[], int n); //打印(显示)数组a中前n个元素
void swap2int(int *x, int *y){
int temp = *x;
*x = *y;
*y = temp;
};

int main()
{
int x[20]={1,6,3,5,4,9,7};
char order='d';
sortIntArr(x,7,order);
printIntArr(x,7);
insertArr(-1,x, 7,order);
printIntArr(x,8);//数组中数据长度增加1.
  return 0;
}

void sortIntArr(int a[], int n, char order)
{
if(order!='u' && order !='d') return;
for(int i=0;i<n-1;i++)
{
if(order=='u')
{
for(int j=0;j<n-i-1;j++)
if(a[j]>a[j+1]) //升序
swap2int(&a[j], &a[j+1]);
}
else if(order=='d')
{
for(int j=0;j<n-i-1;j++)
if(a[j]<a[j+1]) 
swap2int(&a[j], &a[j+1]);
}
}

return;
}
//x是待插入数据
int   insertArr(int x, int a[], int n, char order )
{
if(order!='u' && order !='d') return -1;
int i=n-1;
if(order=='u')
{
while(i>=0 && a[i]>x) 
{
a[i+1]=a[i];//往后移动数据
a[i] = x;//插入数据
i--;
}
}
else if(order=='d')
{
while(i>=0 && a[i]<x) {
a[i+1]=a[i];//往后移动数据
a[i] = x;//插入数据
i--;
}
}
if(i==n-1) a[n]=x; //x比数组中最小元素还要小
return 0;//正确插入,返回0
}
void printIntArr(int a[], int n)
{
if(n<=0) return;
for(int i=0;i<n;i++)
printf("%4d  ", a[i]);
putchar('\n');
return;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hahatianx
2013-12-08 · 超过26用户采纳过TA的回答
知道答主
回答量:136
采纳率:0%
帮助的人:66.9万
展开全部
菜鸟方法:从末尾逐个查找,如果元素大于目标元素,向后移动元素,直至找到目标元素应有的位置。复杂度是O(n)
更多追问追答
追问
程序怎么写啊
追答

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
与子如初见
推荐于2018-02-26 · TA获得超过1638个赞
知道小有建树答主
回答量:1117
采纳率:100%
帮助的人:795万
展开全部
#include<stdio.h>

int main(void)
{

int a[10] = {1,2,3,4,5,6,7,8,9};
int i = 0,j = 0;
int n;
printf("input a number:");
scanf("%d",&n);
if(n>a[8])
{
a[9] = n;
}
else
{
for(i=0;i<9;i++)
{
if(a[i]<=n && n<= a[i+1])
{
for(j = 9;j>i+1;j--)
{
a[j] = a[j-1];
}
a[j] = n;
break;
}
}
}
for(i=0;i<10;i++)
printf("%d\t",a[i]);
printf("\n");
return 0;
}
参考下。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式