8.对于一个有正数和负数的数组,将其中所有小于 0 的元素放到所有大于 0 的元素的前面。使用的算法是:从左右两个方向扫描数组,从左向右找到大于等于 0 的元素,从右向左找到小于 0 的元素,将两者交换。依此类推,直到扫描完为止。试建立一个类 ARR,完成上述工作。
具体要求如下:
- 私有数据成员。
- int n:数组实际元素个数。
- int a[100]:初始时存放原始数组,最终存放交换后的数组。
- 公有成员函数。
- ARR(int x[ ], int size):构造函数, 用参数 size 初始化 n,用 x 数组初始化 a 数组。
- void change( ):使用以上算法,完成调换数组元素的工作。
- void show( ):输出 a 数组的值。
- 在 主 函 数 中 完 成 对 该 类 的 测 试 。 定 义 一 个 整 型 数 组 int b[10] , 其初值是{1,-3,-1,3,2,4,-4,5,-5,-2},定义一个 ARR 类的对象 v,用 b 数组及其元素个数初始化该对象,先
输出原始数组的值,然后交换数组元素的值,最后输出交换后的结果。
程序运行结果应为:
1 -3 -1 3 2 4 -4 5 -5 -2
-2 -3 -1 -5 -4 4 2 5 3 1
#include<iostream>
using namespace std;
class ARR{
int n,a[100];
public:
ARR(int x[],int size):n(size){
for(int i=0;i<n;i++){
a[i]=x[i];
}
}
void change(){
int *q=a,*p=a+n-1,t;
while(q<p){
while(*q<0)q++;
while(*p>=0)p--;
if(q<p){//这个条件限制不要忘记加
t=*q;
*q++=*p;
*p--=t;
}
}
}
void show(){
for(int i=0;i<n;i++){
cout<<a[i]<<' ';
}
cout<<endl;
}
};
int main(){
int b[]={1,-3,-1,3,2,4,-4,5,-5,-2};
ARR arr(b,10);
arr.show();
arr.change();
arr.show();
return 0;
}