Обработка одномерного массива

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//Дан одномерный массив целых чисел. Требуется упорядочить его таким образом, чтобы сначала шли все отрицательные числа, затем нули, затем положительные числа, но взаимный порядок отрицательных и положительнвх чисел не изменился.
//Например, из массива
//0, -2, 5, -4, 20, 0, 10, -2
//должен получиться массив
//-2, -4, -2, 0, 0, 5, 20, 10.
//Дополнительный массив не использовать.
//http://spaces.ru/forums/?r=16764730&link_id=478588&p=1&sid=::sid::&tp=1
#include <iostream>
using namespace std;
int main(){
int a[] = { 5,-2,-2,-5,0,0,0,-4};
int iter = 0;
for (int i = 0; i < sizeof(a) / sizeof(int); i++){
int j = i;
while (a[j]<0&&(a[j - 1]>-1) || (a[j] == 0 && a[j - 1]>0)){
swap(a[j], a[j - 1]);
j--;
}
}
for (int i = 0; i < sizeof(a) / sizeof(int); i++) cout << a[i] <<" ";
cin.get();
return 0;
}