社区
C语言
帖子详情
华为面试题
fidt982
2005-12-01 09:18:08
有1,2,....一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度O(1),使用交换,而且一次只能交换两个数.
//这是昨天在华为的面试题,楞是没做出来.
...全文
3615
133
打赏
收藏
华为面试题
有1,2,....一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度O(1),使用交换,而且一次只能交换两个数. //这是昨天在华为的面试题,楞是没做出来.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
133 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lovememememe
2006-02-12
打赏
举报
回复
mark
Fly3361bird
2005-12-19
打赏
举报
回复
测试了下,可以,
这个小程序高了这么长,结贴给分把
oosky2004
2005-12-19
打赏
举报
回复
不错。
这贴值得顶。。。
支持鼎鼎的算法,你是咋想出来的呢。
JOKER_UFO
2005-12-19
打赏
举报
回复
不好意思,又插嘴了.
排序算法的要点(目前最快排序算法复杂度为n*log2(n)) + 题目的条(时间复杂度为O(n))=>不可能.=> 于是想办法 =>再次利用题目特殊条件 => 方案(特殊问题特殊解决)
do i <-0 to n-1
if a[i] > i
swap(a[a[i]-1],a[i])
zzyzww
2005-12-19
打赏
举报
回复
计数排序,就好了!
woodysunny
2005-12-19
打赏
举报
回复
a = ( int* ) malloc ( ( n + 1 ) * sizeof( int ) );
这个是什么意思啊?
看不懂
ghy2001
2005-12-19
打赏
举报
回复
回一下,有空研究.
Fly3361bird
2005-12-18
打赏
举报
回复
for(i=0;i<n;i++)
{
b=a[i];
a[i]=a[b-1];
a[b-1]=b;
}
修改了下了上面的程序,
如果这都不算爱
2005-12-18
打赏
举报
回复
回头想来 weisunding(鼎鼎) 用了
if ( a[i] == i + 1)
i++;
还不如
a[i] = i + 1;
---------------------------------
HW到底要考什么?!
wklucky
2005-12-18
打赏
举报
回复
好好学习..
langzi520
2005-12-18
打赏
举报
回复
不晓得这个正确的算法是怎么想出来的/
laiwusheng
2005-12-18
打赏
举报
回复
大家要努力啊
lvfeng180
2005-12-18
打赏
举报
回复
ding
luyufan221
2005-12-17
打赏
举报
回复
那是C++语言里面的引用啊!!!
可以用C里面的指针代替!!
yuairong
2005-12-17
打赏
举报
回复
三楼的大哥,你的程序写得还可以,只不过里面有点看不懂的地方,如:int swap( int&, int& );和int swap( int &i, int &j )这两个地方,俺在运行是提示出错了,把这两个地方的&符号去掉以后就可以了,可不可以解释一下用‘&’的目的呀!!!
yuairong
2005-12-17
打赏
举报
回复
各位大师,大家都是高手,写程序要整齐美观一点我们这些菜鸟才可以顺利地看哦!!
谢谢了!!!
zhiguo_he
2005-12-17
打赏
举报
回复
**** Shaffle <<Data Structs And Algorithm Analysis>>的第2章有个时间空间权衡的例子就是这个问题
luyufan221
2005-12-17
打赏
举报
回复
我也觉的只有
weisunding(鼎鼎)是对的,
其它的算法都有问题
大家觉的呢??
如果这都不算爱
2005-12-16
打赏
举报
回复
//帮 weisunding(鼎鼎) 整理下,他的很经典啊,呵呵.
#include<iostream.h>
int main()
{
int a[] = {10,6,9,5,2,8,4,7,1,3};
int len = sizeof(a) / sizeof(int);
int temp;
for(int i = 0; i < len; )
{
temp = a[a[i] - 1];
a[a[i] - 1] = a[i];
a[i] = temp;
if ( a[i] == i + 1)
i++;
}
for (int j = 0; j < len; j++)
cout<<a[j]<<",";
return 0;
}
如果这都不算爱
2005-12-16
打赏
举报
回复
//经过测试,weisunding(鼎鼎) 的算法是对的, fabio210(狂笑江湖)的方法不对,下面这个算法也没问题
#include <stdio.h>
#include <iostream.h>
void swap(int v[], int i, int j)
{
int temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
void qsort(int v[], int left, int right)
{
int i, last;
if (left >= right)
return;
swap(v, left, (left+right)/2);
last = left;
for (i = left+1; i <= right; i++)
if (v[i] < v[left])
swap(v, ++last, i);
swap(v, left, last);
qsort(v, left, last-1);
qsort(v, last+1, right);
}
int main()
{
int a[] = {10, 5, 9, 7, 8, 2, 6, 3, 1, 4};
qsort(a, 0, 9);
for (int i = 0; i < 10; i++)
cout<<a[i]<<",";
cout<<endl;
}
加载更多回复(113)
华为
面试题
华为
面试题
华为
面试题
华为
面试题
华为
面试题
华为
面试题
华为
面试题
华为
面试题
华为
面试题
华为
面试题
华为
面试题
华为
面试题
华为
面试题
华为
面试题
华为
面试题
华为
面试题
华为
面试题
华为
面试题
华为
面试题
软通动力外派
华为
面试题
软通动力外派
华为
面试题
软件工程师职业规划与
面试题
资料集锦
本课程主要是为在校大学生提供职业规划及提供整套的
面试题
资料下载使用;供广大学生,或者想进入该行业的有志人士学习及下载使用;搞清楚应该学什么,学那些课程,学习的顺序,怎么学;给广大IT行业的毕业生提供全套的
面试题
资料集锦,搞清楚用人企业向了解什么,会问什么问题,要注意什么问题等;
华为
面试题
与答案[测试]
华为
面试题
与答案
华为
面试题
与答案
华为
面试题
与答案
华为
面试题
与答案
华为
面试题
与答案
华为
面试题
与答案
华为
面试题
与答案
华为
面试题
与答案
华为
面试题
与答案
华为
面试题
与答案
C语言
面试题
大汇总之
华为
面试题
C语言
面试题
大汇总之
华为
面试题
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章