百度面试题,假设一整型数组存在若干正数和负数,现在通过某种算法使得该数组的所有负数在正数的左边,且保证负数件和正数间元素相对位置不变。时空复杂度要求分别为:o(n),o(1)
例如 -3 4 2 -1 7 3 -5 排序后 -3 -1 -5 4 2 7 3 |
#include <iostream>
using namespace std;
int main()
{
int a[100];
memset(a,NULL,sizeof(a));
int n;
while(cin >> n && n)
{
for(int i=0;i<n;i++)
cin >> a[i];
int *p,*q;
p = q =a;
for(i=0;i<n;i++,p++)
{
if(*p <0)
{
int *temp = p;
for(int *j=p-1;j>=q;j--,p--)
{
int t;
t = *p;
*p = *j;
*j = t;
}
p = temp;
q++;
}
}
for(i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
}
没什么难度,写的比较差。