一道题目困扰了我

davidbai 2003-10-18 03:01:34
一道题目困扰了我

现有一个包含若干个(不小于10个)元素的整型数组,数组中的元素按照从小到大排列,现要求用户输入一个整数,将该数组插入到整形数组中的元素仍然按照从小到大排列的顺序。

这是一个插入式排序的题目
我感觉意思是
x[0]=2 x[1]=5 x[2]=14 x[3]=17 x[4]=21 x[5]=26 x[6]=30 x[7]=34 x[8]=41
然后x[9]不赋值

用户输入一个值 然后判断这个值的大小是否插在哪里,然后在排序
具体过程我写不出来
请各位帮帮下我
非常感谢!
...全文
98 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
davidbai 2003-10-18
  • 打赏
  • 举报
回复
在线等待ING
davidbai 2003-10-18
  • 打赏
  • 举报
回复
如果不用COUNT只用SCANF,FOR, WHILE语句该这么写?
各位大大帮帮忙
小弟非常急
davidbai 2003-10-18
  • 打赏
  • 举报
回复
非常感谢各位对小弟的帮助
此题是我考试的题目
各位所写的已经超出了偶学习的范围
5555555所以能不能用稍微笨点简单点的方法解决?
偶是学了<stdio.h>的库文件而已。。。
Darkay_Lee 2003-10-18
  • 打赏
  • 举报
回复
起码要用截半查找啦
instigator 2003-10-18
  • 打赏
  • 举报
回复
呵呵
老大,对于已经排序了的问题
再用这种时间复杂度为n/2
的算法是不是有点对不起数据结构老师?
danpianji2002 2003-10-18
  • 打赏
  • 举报
回复
这是专门针对这道题的:
#include <iostream.h>

void main()
{
int q;
int i;
int n[10]={1,5,16,28,34,39,42,55,98};
for(i=0;i<9;i++)
cout<<n[i]<<"\t";
cout<<"\n"<<"请输入一个整数";
cin>>q;
if (q>n[8])
n[9]=q;
else{
for(i=0;q>n[i];i++);
for(int j=9;j>i;j--)
n[j]=n[j-1];
n[i]=q;}
for (i=0;i<10;i++)
cout<<n[i]<<"\t";
}
danpianji2002 2003-10-18
  • 打赏
  • 举报
回复
楼上的好像有问题阿
liem 2003-10-18
  • 打赏
  • 举报
回复
从后向前比较,到合适位置插入。
#include <iostream.h>
int main()
{
int a[10]={2,4,8,14,25,28,36,42};
int x;
cin>>x;
for(int i=8;i>=0&&a[i]>x;i--)
a[i+1]=a[i];
a[i+1]=x;
for(i=0;i<10;i++)
cout<<a[i]<<ends;
cout<<endl;
return 0;
}
fangjinhuo 2003-10-18
  • 打赏
  • 举报
回复
m为用户输入的值
fangjinhuo 2003-10-18
  • 打赏
  • 举报
回复
void insertnum(float m)
{ int i=n-1;
while(m<=a[i]&&i>=0)
{
a[i+1]=a[i];
i--;
}
a[i+1]=m;
}
gambolgs 2003-10-18
  • 打赏
  • 举报
回复
用折半查找:
//x[0]--x[N - 1]已经升序赋值,现查找y:

int a = 0, b = N - 1, p = (a + b) / 2;

while (x[p] != y) {
if (x[p] - y < 0) {
a = p;
}
else {
b = p;
}
p = (a + b) / 2;
}

//插入:
int * pmove;
for (pmove = x + N - 1; pmove >= p; pmove --)
*(pmove + 1)= *pmove;

x[p] = y;
davidbai 2003-10-18
  • 打赏
  • 举报
回复
老大你写的太复杂了
能有适用于初级点的吗?
只需要循环一次就OK
数组都是程序里赋值
数组个数也是规定10个吧
pxwzd123 2003-10-18
  • 打赏
  • 举报
回复
本程序VC6.0编译通过。
#include "iostream.h"
class insert
{
float a[100];
int n;
public:
insert()
{
for(int i=0;i<100;i++)
a[i]=0;
n=0;
}
void inputnum()
{
cout<<"输入树组个数:";
cin>>n;
cout<<"输入从小到大的数组:";
for(int i=0;i<n;i++)
cin>>a[i];
}
void insertnum(float m)
{
for(int i=n-1;i>=0;i--)
{
if(m<=a[i])
{
a[i+1]=a[i];
if(i==0)
a[0]=m;
}
else
{
a[i+1]=m;break;
}
}
}
void disp()
{
for(int i=0;i<n+1;i++)
cout<<a[i]<<endl;
}
};
void main()
{
float x;
insert s;
s.inputnum();
cout<<"输入你要插入的数:";
cin>>x;
s.insertnum(x);
s.disp();
}

69,336

社区成员

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

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