一个我不会却很简单的问题

zsf0615020117 2008-11-02 10:43:56
将一个数插入一个有序数列中,插入后数列仍然有序,用指针实现
怎么实现?
...全文
236 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
leank 2008-11-03
  • 打赏
  • 举报
回复
不考虑数据重复:

#include "stdio.h"
int main()
{

int a[7]={1,2,3,5,6,9};//原来的有序数组
int *p = a;
int b = 4;//4为插入的值
for(int i = 6; i >= 0; i--)
{
if (0 == i)
{
*p = 4;
}
else if(4 > *(p + i-1))
{
*(p + i) = 4;
break;
}
else
{
*(p + i) = *(p + i-1);
}
}
for (int j=0; j < 7; j++)
{
printf("%d", *(p + j));
}
return 0;
}
catamout 2008-11-03
  • 打赏
  • 举报
回复
不是 有个插入排序法吗
wakin001 2008-11-03
  • 打赏
  • 举报
回复
要知道数组名其实就是地址,所有你知道怎么用指针来表示数组的成员就知道怎么做这题了.
比如: int a[] = {1,2,3,4}
那么: *a == 1 == a[0]; *(a+1) == 2 == a[1]
这里没必要用什么二分法啊什么,直接从*a依次向后找,找到合适的位置就插入,注意这个时候要重新申请一个int的内存来存放最后的元素,否则,树组会越界.
WizardOz 2008-11-03
  • 打赏
  • 举报
回复
为什么每当我看到这种问题,总是不知道在问的是什么?
czbever 2008-11-03
  • 打赏
  • 举报
回复
太esay了 不过还是顶一下
baoxin052138 2008-11-02
  • 打赏
  • 举报
回复
用链表实现,不用移动的
fenghuijun135 2008-11-02
  • 打赏
  • 举报
回复
用一个指向数组的指针就能够实现
leilei5421 2008-11-02
  • 打赏
  • 举报
回复
链表
MilanSpiRiT 2008-11-02
  • 打赏
  • 举报
回复
数列做成链表,看你按照什么顺序了。。根据要求找到这个数应该的所在位置,然后执行链表的插入操作
zsf0615020117 2008-11-02
  • 打赏
  • 举报
回复
二分法是简单 可是题目要求用指针实现
谁能给我具体的程序吗
JavaerRobertLi 2008-11-02
  • 打赏
  • 举报
回复
建议用链表实现

如果是用数组的话

void insert(int arr[],int num,int end)
{
int n,temp;
for(n=0;n<end;n++)
if(num<arr[n])
break;

while(n<end)
{
temp=arr[n];
arr[n]=num;
num=temp;
n++;
}
}
zsf0615020117 2008-11-02
  • 打赏
  • 举报
回复
我知道 可是最后没有结果
可能有些细节有问题
xhs_lh04 2008-11-02
  • 打赏
  • 举报
回复
用链表吧
用数组插入后还要移位置不如链表好
lockhall 2008-11-02
  • 打赏
  • 举报
回复
先找到合适的位置,可以使用二分法来快速找到;

然后就是插入列表的动作了。

:)
zsf0615020117 2008-11-02
  • 打赏
  • 举报
回复
我昨天考试的题目就是这样的
是在一个有序数组中插入一个数
aaajj 2008-11-02
  • 打赏
  • 举报
回复
指针移动,找到合适的位置,插入,注意后面的序列要相应的移动
  • 打赏
  • 举报
回复

用指针实现 ??? 是不是把数组看成指针 还是用链表....
zsf0615020117 2008-11-02
  • 打赏
  • 举报
回复
我也是这样写的 ,可是运行时没有答案
dfyx123 2008-11-02
  • 打赏
  • 举报
回复
main()
{
int a[10]={0,1,2,3,4,6,7,8,9};//存储9个有序数列
int b=5,i=0;//待插入数为5;
int *p=a+8;//指向有序数列最后一个数
while(*p>b)
{
*(p+1)=*p;//将有序数列中大于待插入数的数后移
p--;

}
*(p+1)=b;
for(i=0;i<10;i++)
printf("%d,",a[i]);
printf("\n");

}
zsf0615020117 2008-11-02
  • 打赏
  • 举报
回复
谢谢各位大侠的帮忙,可是我还是想知道用指针怎么实现

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧