编写一个函数实现将数组中>=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编辑过]