类实现一维数组正负数交换

来源:互联网 发布:python安装requests库 编辑:程序博客网 时间:2024/06/05 08:07
/*对于一个有正数和负数的数组,将其中所有小于0 的元素放到所有大于 0的元素的前面。使用的算法是:从左右两个方向扫描数组,从左向右找到大于等于0的元素,从右向左找到小于0的元素,将两者交换。依此类推,直到扫描完为止。试建立一个类ARR,完成上述工作。具体要求如下: (1) 私有数据成员。    int n:数组实际元素个数。    int a[100]:初始时存放原始数组,最终存放交换后的数组。  (2) 公有成员函数。    ARR(int x[ ], int size):构造函数,用参数size初始化n,用x数组初始化a数组。    void change( ):使用以上算法,完成调换数组元素的工作。    void show( ):输出a数组的值。 (3) 在 主 函 数 中 完 成 对 该 类 的 测 试 。 定 义 一 个 整 型 数 组 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{private:    int n;    int a[10];public:    arr(int x[], int size);    void change();    void show();};arr::arr(int x[], int size){    n = size;    for (int i = 0; i < n; i++)    {        a[i] = x[i];    }}void arr::change(){    //此段语句可以从头到尾检索并交换,有“负负得正”的意思,数组经历两次交换。    int i = 0, j = n - 1;    while (i<n&&j>=0)      {        while (a[i] < 0) i++;        while (a[j] > 0) j--;        int temp;        temp = a[i];        a[i] = a[j];        a[j] = temp;    }    //对数组进行首尾交换,注意k的范围,否则会进行两遍交换导致无法显示结果    for (int k = 0; k < n/2; k++)    {        int temp;        temp = a[k];        a[k] = a[n - 1 - k];        a[n - 1 - k] = temp;    }}void arr::show(){    for (int i = 0; i < n; i++)    {        cout << a[i] << '\t';    }    cout << endl;}int main(){    int x[] = { 1,-3,-1,3,2,4,-4,5,-5,-2 };    arr arr1(x, 10);    arr1.show();    arr1.change();    arr1.show();    system("pause");    return 0;}
原创粉丝点击