【原创】#面试编程题#将数组里的负数排在数组的前面
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;
}
自己想到的有两个思路,
第一个思路是直接对数组进行修改,首先要确定数组的尾部一定全是正数,需要将尾部的负数前移到刚好后面出现正数的地方,然后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;
}
相关文章推荐
- [练习题] 将数组中的负数全部移到非负数的前面,要求O(n)时间复杂度
- 微软谷歌面试100题之调整数组顺序使奇数位于偶数前面
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序。 要求时
- 程序员面试题目总结--数组(五)【数组的后面m个数移动为前面m个数、列的前n项数据、判断整数x是否可以表示成n个连续正整数的和、数组中出现奇数次的元素、二维数组中的查找】
- 面试算法(十三)调整数组顺序使奇数位于偶数前面
- 瑞恩面试编程题:找出数组中出现次数最多且最大的那个数及出现的次数
- 调整数组 使得数组中负数排在前面正数排在后面,并且正数和负数的相对位置不变 (递归思路)
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序,比如: input: 1,7,-5,9,-12,15 ans: -5,-12,1,7,9,15 要求时
- 我们爱面试,一面一学-----微软谷歌面试100题--【54】调整数组顺序使奇数位于偶数前面
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序,比如: input: 1,7,-5,9,-12,15 ans: -5,-12,1,7,9,15 要求时
- 【剑指Offer面试编程题】题目1516:调整数组顺序使奇数位于偶数前面--九度OJ
- 关于数组的js编程题(面试很常见哦)
- 【剑指Offer面试编程题】题目1516:调整数组顺序使奇数位于偶数前面--九度OJ
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的相对顺序.
- H面试(24):调整数组顺序使奇数位于偶数前面
- 将数组中负数放在正数前面
- 面试编程题2:不要用内建方法,实现两个数组合并
- 将数组里的负数排在数组的前面,正数排在数组的后面。但不改变原先负数和正数的排列顺序。
- 将数组中负数放在正数前面
- 把数组中负数放在前面,0放中间,正数放后面,并保持相对顺序