class Program
{
const int MaxSize = 1000;
static void Main(string[] args)
{
int PosiNum = 0,PosiDone=0;
int NegaNum = 0,NegaDone=0;
int tempInt=0;
int[] inputArray = new int[MaxSize];
string input = Console.ReadLine();
char splitcomma = ',';
string[] temp = input.Split(splitcomma);
int NumofNum = temp.Length;
for (int i = 0; i < NumofNum; i++)
inputArray[i] = getNum(temp[i]);
for (int i = 0; i < NumofNum; i++)
tempInt=(inputArray[i] > 0) ? PosiNum++:NegaNum++;
Console.WriteLine("{0} {1} ", PosiNum, NegaNum);
int index = 0;
int operCount = 1;
int Maxnum = 0;
for (int i = 0; i < NumofNum; i++)
if (Math.Abs(inputArray[i]) > Maxnum)
Maxnum = Math.Abs(inputArray[i]);
Maxnum++;
int PosiPosi = 0;
int NegaPosi = 0;
for (int i = 0; i < NumofNum; i++)
if (inputArray[i] > 0)
{
PosiPosi++;
inputArray[i] += Maxnum * (PosiPosi + NegaNum);
}
else {
NegaPosi++;
inputArray[i] += Maxnum * (NegaPosi+1);
}
index = 0;
while (index < PosiNum + NegaNum)
{
int tempC = 0;
int posi = inputArray[index] / Maxnum;
while(posi!=index+1)
{
tempC = inputArray[index];
inputArray[index] = inputArray[posi-1];
inputArray[posi-1] = tempC;
posi = inputArray[index] / Maxnum;
}
index++;
}
for (int i = 0; i < NumofNum; i++)
if (i < NegaNum)
{
Console.WriteLine("{0}", inputArray[i]-(i+2)*Maxnum);
}
else
Console.WriteLine("{0}", inputArray[i] - (i + 1) * Maxnum);
Console.ReadLine();
}
static int getNum(string s)
{
char[] temp = s.ToCharArray();
int sign = 1;
int sum = 0;
foreach (char c in temp)
{
if (c == '-')
sign = -1;
else
sum = sum * 10 + ((int)c - 48);
}
return sum*sign;
}
}
一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序。
比如: input: 1,7,-5,9,-12,15 ,ans: -5,-12,1,7,9,15 。且要求时间复杂度O(N),空间O(1) 。