急!用C语言解决排序问题.

txf168 2001-03-26 10:17:00
一个数组1000个元素a[1000],我要求一个数大于前面的数,并且至少要大于10个前面的数,记下该数Mark1,继续寻找一个数小于前面的数,并且至少要小于10个前面的数,记下该数Mark2,继续寻找一个数大于前面的数,并且至少要大于10个前面的数,记下该数Mark3;再继续找这样的3个数;如果第一个数小于前面的数,并且至少要小于10个前面的数,记下该数Mark1,继续寻找一个数大于前面的数,并且至少要大于10个前面的数,记下该数Mark2,继续寻找一个数小于前面的数,并且至少要小于10个前面的数,记下该数Mark3;难点是确定第一个是大于前面10个数的还是小于前面10个数的数.此问题有三个算法.请问那位高手快速指点.能帮我写一下吗?txf99@21cn.com
...全文
235 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
andybogard 2001-04-17
  • 打赏
  • 举报
回复
我倒!
duz 2001-04-17
  • 打赏
  • 举报
回复
怎么会是O(N^2)呢,10N还是O(N)
Linnis 2001-04-16
  • 打赏
  • 举报
回复
这是一个分支定界的问题,它的时间复杂度为O(N^2),关键是怎么做好取值排序.
yrs 2001-04-14
  • 打赏
  • 举报
回复
不知道你要什么结果.
简单的说,如果用一个函数来完成上述功能,你希望能从函数的输出取得什么信息.
如果只是排序,你希望排序后的数组是个什么样的.
你在大作中提到: 难点是确定第一个是大于前面10个数的还是小于前面10个数的数.
这有什么难的,建立一个序列,依次为 大于前面10个数的mark,小于前面10个数的mark......
如果不存在就舍为空或者其他特殊标记不就行了.
horby 2001-04-14
  • 打赏
  • 举报
回复
至少我第一遍没看懂你得问题....也许是我笨...
duz 2001-04-14
  • 打赏
  • 举报
回复
var amin[10],amax[10];
int i,j,k;

memcpy(amin,a,sizeof(amin));
qsort(amin,10,size(a[0]),thecmpfunction);
for(i=0;i<10;i++)amax[i]=amin[9-i];

int find=0;
for(i=10;i<1000;i++)
{
var v=a[i];
if(v>amin[9])//At least bigger than 10 number
{
find=1;
break;
}
if(v<amax[9])//At least less than 10 number
{
find=-1;
break;
}
for(j=0;j<10;j++)
{
if(v<amin[j])
break;
}
memmove(amin+j+1,amin+j,sizeof(a[0])*(9-j));
amin[j]=v;
for(j=0;j<10;j++)
{
if(v>amax[j])break;
}
memmove(amax+j+1,amax+j,sizeof(a[0])*(9-j));
amax[j]=v;
}
......
vampirelord 2001-04-13
  • 打赏
  • 举报
回复
还有啊,你的描述似乎有些混乱耶。
vampirelord 2001-04-13
  • 打赏
  • 举报
回复
对呀,是考试还是求助最好说明白。
taolei 2001-04-10
  • 打赏
  • 举报
回复
你自己能搞定还来这里提问。下回再提问要声明是考大家的。
txf168 2001-04-10
  • 打赏
  • 举报
回复
我提了很多问题,没有一个人帮我解决,最后都是我自己搞定的
xyjdn 2001-04-04
  • 打赏
  • 举报
回复
hi
iamfool 2001-03-27
  • 打赏
  • 举报
回复
这是什么意思,

如果你已经排好序,把每10个数做为一个节点,每一个节点有10个子点,
是吧,
holyfire 2001-03-27
  • 打赏
  • 举报
回复
晕~~~~~~~
code-is-poetry 2001-03-27
  • 打赏
  • 举报
回复
我也一起晕

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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