题目描述:一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序 比如: input: 1,7,-5,9,-12,15 ans: -5,-12,1,7,9,15 要求时间复杂度O(N),空间O(1) 。
代码:
#include <stdio.h>
void sortarray(int *array,int n)
{
if(array==NULL)
return;
int start=0,end=n-1,temp=0;
while(start<end)
{
while(start<end&&array[end]>=0) end--;
while(start<end&&array[start]<0) start++;
temp=array[end];
array[end]=array[start];
array[start]=temp;
while(array[end-1]>=0)
{
temp=array[end];
array[end]=array[end-1];
array[end-1]=temp;
end--;
}
while(array[start+1]<0)
{
temp=array[start];
array[start]=array[start+1];
array[start+1]=temp;
start++;
}
temp=array[start];
array[start]=array[end-1];
array[end-1]=temp;
temp=array[end];
array[end]=array[start+1];
array[start+1]=temp;
start++;
end--;
}
}
int main()
{
int array[]={1,7,-5,9,-12,15};
for(int i=0;i<6;i++)
printf("%d ",array[i]);
printf("\n");
sortarray(array,6);
for(int i=0;i<6;i++)
printf("%d ",array[i]); printf("\n");
return 0;
}
output:
[root@localhost code]# ./a.out
1 7 -5 9 -12 15
-5 -12 1 7 9 15