| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 585 人关注过本帖
标题:[求助]做个算法题
只看楼主 加入收藏
chenkuanyi
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2007-4-21
收藏
 问题点数:0 回复次数:9 
[求助]做个算法题

编写一个函数实现将数组中>=0的数组元素排列在数组前部,而将<0的数组元素排列在数组后部,并满足以下要求:
(1) 不要对数组元素进行排序,只需要满足归类要求即可
(2) 尽可能降低算法复杂度
(3) 数组元素只能在数组内部进行移动、交换等操作(可借用临时变量),但不能使用另外定义的数组变量


我是在数组头尾各定义一个指针,当前面的指针<0,后面的指针>0时就交换,
但实现时有错,请大家给我改一下啊,照我的算法思路;

# include <iostream>
using namespace std;

void main()
{
int a[] = {1, 3, -7, -4, 4, 8, -5, 33, 55, -6};
int *p = NULL;
int *q = &a[9];

for ( p = &a[0]; p != q; p++)
{
if ((*p) < 0)
{
while (p != q)
{
if ( *q > 0)
{
int temp = 0;
temp = *p;
*p = *q;
*q = temp;
q--;
break;
}
else
{
q--;
}
}
}
}
for (int i = 0; i < 10; i++)
{
cout << a[i] << "\t";
}
system("pause");
}

这时有时正确的:
E:\>11
1 3 55 33 4 8 -5 -4 -7 -6

但当我改变数组时,有时会有系统计错误,

[此贴子已经被作者于2007-5-18 22:36:48编辑过]

搜索更多相关主题的帖子: 算法 元素 变量 指针 定义 
2007-05-18 22:27
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
收藏
得分:0 

# include <iostream>
using namespace std;

int main()
{
int a[] = {1, 3, -7, -4, 4, 8, -5, 33, 55, -6};
int t,i,n;
n=sizeof(a)/sizeof(int);
for(i=0;i<n;i++)
if(a[i]<0)
{
t=a[i];a[i]=a[n-1];a[n-1]=t;
n--;i--;
}
for (int i = 0; i < sizeof(a)/sizeof(int); i++)
{
cout << a[i] << endl;
}
getchar();

}


 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-05-18 23:04
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
其实楼主你的方法,我认为是效率不错的选择了。
不过你何必用指针去迭代,用个索引不就OK了!?


Fight  to win  or  die...
2007-05-19 01:02
chenkuanyi
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2007-4-21
收藏
得分:0 

谢谢啊,
大家能指出我的那个算法错在那里吗?
照着我的步骤改一改把
谢谢啊

2007-05-19 09:39
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
以下是引用chenkuanyi在2007-5-19 9:39:46的发言:

谢谢啊,
大家能指出我的那个算法错在那里吗?
照着我的步骤改一改把
谢谢啊

第一个循环条件那里不应该是!=而是<=。

当两个指针相邻且需要交换时,自增,自减会使指针交叉,达不到相等。
再来就出现内存错误了。

这就是为什么有时行有时不行!

[此贴子已经被作者于2007-5-19 10:11:17编辑过]


Fight  to win  or  die...
2007-05-19 10:09
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1029
专家分:177
注 册:2007-5-10
收藏
得分:0 
这是语言题……不是算法题
2007-05-20 01:38
rtx79
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-7-9
收藏
得分:0 
怎的这么巧,我在看的书正好是这个quicksort法(快速排序法)
2007-05-20 22:00
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
以下是引用rtx79在2007-5-20 22:00:24的发言:
怎的这么巧,我在看的书正好是这个quicksort法(快速排序法)

对啊,quicksort用了这个分割思想!


Fight  to win  or  die...
2007-05-20 22:19
孤魂居士
Rank: 2
来 自:老A(中国地大)
等 级:论坛游民
威 望:4
帖 子:1142
专家分:18
注 册:2007-5-21
收藏
得分:0 
我支持6楼的意见

准备用3年做个高级软件工程师 10年也做不成。准备用10年做成高级软件工程师 3年就成了QQ 群 45771086
欢迎版主...欢迎JAVA爱好者...
一起从深夜 到凌晨...
2007-05-22 01:41
hejinjiang
Rank: 1
等 级:新手上路
帖 子:88
专家分:0
注 册:2007-5-15
收藏
得分:0 
题目要求让编写一个函数..2楼写得不是函数啊..

<.不怕默默无闻,就怕碌碌无为.,}
2007-05-22 09:08
快速回复:[求助]做个算法题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021180 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved