您的位置:首页 > 职场人生

【原创】#面试编程题#将数组里的负数排在数组的前面

2013-06-20 15:46 483 查看
/* #面试编程题#将数组里的负数排在数组的前面, 正数排在数组的后面。但不改变原先负数和正数的排列顺序。 例:input: -5,2,-3, 4,-8,-9, 1, 3,-10; output: -5, -3, -8, -9, -10, 2, 4, 1, 3。*/

自己想到的有两个思路,

第一个思路是直接对数组进行修改,首先要确定数组的尾部一定全是正数,需要将尾部的负数前移到刚好后面出现正数的地方,然后index定位到此处,往前找第一个正数,按题目要求的规则移到后面地方,index减一,按此方法将数组调整

第二个思路简单,建立两个辅助数组a、b,正的放a,负的放入b ,最后输出b、a里的元素即可

贴上代码:

ps:代码中的index可能有些乱,以后写的时候会注意,抱歉

1 #include<iostream>

2 using namespace std;
3 void adjust1(int *a,int len)
4 {
5 int i,j,k;
6 int temp;
7 if(a[len-1] < 0)
8 {
9 i = len -1;
temp = a[i];//baocun zuihouyige fushu
j = i-1;
while(a[j] > 0)
{
a[j+1] = a[j];
j--;
}
j ++;
a[j] = temp;//make the last part all positive numbers
}
else if (a[len-1] < 0)
{
j = len-1;
while(a[j] > 0)
{
j--;
}
}
while(j > 0)
{
k = j;
while(a[j] < 0)
{
j--;
}
if(a[j] > 0 && j > 0)
{
while(j<k)
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
j++;
}
}
j = k-1;
}
for(i = 0;i<len;i++)
{
cout << a[i] << " ";
}
cout << endl;
}
void adjust2(int *a,int len)
{
int b[len];
int c[len];
int i,j,k;
for(i = 0;i<len;i++)
{
b[i]=0;
c[i]=0;
}
j = 0;
k = 0;
for(i = 0;i<len;i++)
{
if(a[i] > 0)b[j++] = a[i];
else c[k++] = a[i];
}
i = 0;
while(c[i]!=0)
{
cout << c[i++] << " ";
}
i = 0;
while(b[i]!=0)
{
cout << b[i++] <<" ";
}
}
int main()
{
int a[] = {-5,2,-3,4,-8,-9,1,3,-10};
int i;
for(i = 0;i<sizeof(a)/sizeof(int);i++)
{
cout << a[i] << " ";
}
cout << endl;

adjust1(a,9);
adjust2(a,9);
system("pause");

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐