Помогите с задачей на Си (можно Basic)

Ответить
TMF
Сообщения: 1
Зарегистрирован: 10 дек 2007, 20:22

18 дек 2007, 21:50

Дан массив: {Xi}, i=1...n. Перестроить его по правилу: расположить сначала все неотрицательные элементы, затем все отрицательные в ппорядке их следования в исходном массиве. Вспомогательный массив не использовать.
За решение буду очень признателен))
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

19 дек 2007, 10:04

Не забудь, что массивы в C считаются от 0, а не от 1. Т.е. элементы массива длиной N имеют индексы от 0 до (N-1)

Код: Выделить всё

const int N = 100;  // Например, 100
int X [N];
int iLoop, iLoop2;
int iCurrIdx;
int iTmp;

iCurrIdx = 0;
for (iLoop = 0; iLoop < N; iLoop++) {
  if (X [iLoop] >= 0) {  // число неотрицательное?
    // Сдвигаем уже "пройденные" отрицательные элементы, чтобы не нарушать
    // их изначальный порядок
     iTmp = X [iLoop];
     for (iLoop2 = iLoop; iLoop2 > iCurrIdx; iLoop2--) {
        X [iLoop2] = X [iLoop2 - 1];
     };    
     X [iCurrIdx] = iTmp;
     iCurrIdx++;
  };
};
Вот как-то так. Поскольку числа - либо неотрицательные, либо отрицательные (третьего не дано), то после вынесение в начало всех неотрицательных элементов, все отрицательные автоматически окажутся после них.
Ответить