首页 > 代码库 > 某数组里存在乱序的正负数字,要求将负数放到左边,正数放到右边,并且正负数的相对位置不改变

某数组里存在乱序的正负数字,要求将负数放到左边,正数放到右边,并且正负数的相对位置不改变

先说下思路:

  1、先遍历数组,将正负数的个数求出来,当然,如果存在零值,也需要求出个数来

  2、根据之前求出的个数分别申请两个数组,用来存放正负数

  3、再次遍历数组,将正负数放进第二步申请的两个数组中,零值需要排除在外

  4、将第三步得到的两个数组再填回原始数组(也可以再申请一个数组存放结果)

  完成!

 

以下是代码(vs2013,64位win8):

 1 #include <iostream> 2 using namespace std; 3  4 int main() 5 { 6     //定义一个原始数组 7     int arra[] = { -1, 3, 9, 0, -5, -20, -3, 4, 0, 8, -12, 7 }; 8     int nummin = 0, nummax = 0, i = 0, j = 0;//nummin用于存储小于零的数字个数, 9                                             //nummax用于存储大于零的数字个数,i, j用来循环遍历10     bool zeroflag = false;//原始数组中是否有零的存在11     int zerocount = 0;//如果原始数组中存在多个零,则求出具体个数12 13     //先打印一把原始数组14     for (int i = 0; i < 12; i++)15     {16         cout << arra[i] << " ";17     }18     cout << endl;19 20     //遍历原始数组,分别求出大于零的数字个数和小于零的数字个数,以及是否存在零值21     for (i = 0; i < 12; i++)22     {23         if (arra[i] > 0)24         {25             nummax++;26         }27         else if (arra[i] < 0)28         {29             nummin++;30         }31         else32         {33             zeroflag = true;34             zerocount++;35         }36     }37     //根据求出的正负数数量分别申请两个数组用于分别存放正负数38     int *arrmin = (int*)malloc (sizeof(int) * nummin);39     int *arrmax = (int*)malloc(sizeof(int) * nummax);40     int k = 0, m = 0;//用于遍历赋值时作为两个数组的下标41 42     //顺序遍历原是数组,将正负数分别填进两个数组,并没有发生大小比较,43     // 所以正负数的相对位置并没有发生改变,并且将零值排除出来了44     for (i = 0; i < 12; i++)45     {46         if (arra[i] > 0)47         {48             arrmax[k] = arra[i];49             k++;50         }51         else if (arra[i] < 0)52         {53             arrmin[m] = arra[i];54             m++;55         }56     }57 58     //正负数已经分好,现在将两个数组再填回原始数组,当然也可以重新申请一个数组来保存结果59     for (i = 0; i < nummin; i++)//先将负数填进去60     {61         arra[i] = arrmin[i];62     }63 64     if (zeroflag)//如果存在零值65     {66         //按照得到的零值个数将数组中负数后面填上067         for (i = 0; i < zerocount; i++)68         {69             arra[nummin + i] = 0;70         }71 72         //填完零之后紧接着就将正数填进去73         for (int n = 0; n < nummax; n++)74         {75             arra[nummin + n + zerocount] = arrmax[n];76         }77     }78     else    //如果不存在零值79     {80         //直接在负数后面添加正数即可81         for (int n = 0; n < nummax; n++)82         {83             arra[nummin + n] = arrmax[n];84         }85     }86 87     //打印结果88     for (int i = 0; i < 12; i++)89     {90         cout << arra[i] << " ";91     }92     cout << endl;93 94     return 0;95 }

 

 

运行结果: