/*
假设一整型数组存在若干正数和负数,现在通过某种算法使得该数组的所有负数在正数的左边,
且保证负数之间和正数之间元素相对位置不变。时空复杂度要求分别为:o(n),o(1)
我是简单模拟的空间复杂度 o(1) 时间复杂度最坏 o(n*n)
*/
#include <stdio.h>
void f(int a[],int n){
int temp=0,i=0,j,count=0;
int num=0;
int k;
// while(i<n)
for(i=0;i<n;i++)
{
if(a[i]>0)
{
num++;
continue;
}
count=num;
k=i;
temp=a[k];
while(count>0)
{
a[k]=a[k-1];
k--;
count--;
}
a[k]=temp;
}
}
int main(){
int a[]={-5,2,-3, 4,-8,-9,1, 3,-10};
for(int i=0;i<9;i++)
printf("%d ",a[i]);
printf("\n");
f(a,9);
for(int i=0;i<9;i++)
printf("%d ",a[i]);
printf("\n");
//for(;;);
return 0;
}