将数组中负数放在正数前面
2012-08-29 17:23
736 查看
方法一:从头扫描这个数组,每碰到一个正数时,拿出这个数字,并把位于这个数字后面的所有数字往前挪动一位。挪完 之后在数组的末尾有一个空位,这时把该正数放入这个空位。由于碰到一个正,需要移动O(n)个数字,因此总的时间复杂度是O(n2),空间复杂度为O(1)。
View Code
View Code
#include <iostream.h> #include <string.h> void fun4(int *a,int n) { if (NULL==a || n<=1) { return; } int num1=0,num2=0; int *temp=new int ; for (int i=0;i<n;i++) { if (a[i]<0) { temp[num1]=a[i]; num1++; } } num2=n-num1; if (num2<=0) { return; } num2=0; for (i=0;i<n;i++) { if (a[i]>0) { temp[num1+num2]=a[i]; num2++; } } memcpy(a,temp,sizeof(int)*n); delete []temp; } void main() { int data[6]={1,1,15,3,5,12}; fun4(data,6); for (int i=0;i<6;i++) { cout<<data[i]<<" "; } }
相关文章推荐
- 将数组中负数放在正数前面
- 把数组中负数放在前面,0放中间,正数放后面,并保持相对顺序
- 将数组中负数放在正数前面
- 划分一个整形数组,把负数放在左边,零放在中间,正数放在右边
- 编一个程序,输入10个整数,并放在数组中,先降序输出所有的数,再统计并输出其中正数、负数和零的个数
- 编一个程序,输入10个整数,并放在数组中,先降序输出全部的数,再统计并输出当中正数、负数和零的个数
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序。 要求时
- 调整数组 使得数组中负数排在前面正数排在后面,并且正数和负数的相对位置不变 (递归思路)
- 把数组中负数放在左边零在中间正数放右边
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序,比如: input: 1,7,-5,9,-12,15 ans: -5,-12,1,7,9,15 要求时
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序,比如: input: 1,7,-5,9,-12,15 ans: -5,-12,1,7,9,15 要求时
- 将数组里的负数排在数组的前面,正数排在数组的后面。但不改变原先负数和正数的排列顺序。
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的相对顺序.
- 在顺序存储模式下将所有的负数放到正数前面的三种算法
- 重新排列包含正数和负数的数组
- 数组进行奇数和偶数操作 把奇数放在数组前面 偶数放在数组后面
- 找出一个个既有正数又有负数的数组中子数组的和的最大值
- 给一个数组,元素都是整数(有正数也有负数),寻找连续的元素相加之和为最大的序列。
- 一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和,求所有子数组的和的最大值,要求时间复杂度为O(n)。
- 将无序数组中的奇数放在偶数前面