BBB » 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++;
};
};
Вот как-то так. Поскольку числа - либо неотрицательные, либо отрицательные (третьего не дано), то после вынесение в начало всех неотрицательных элементов, все отрицательные автоматически окажутся после них.
Не забудь, что массивы в C считаются от 0, а не от 1. Т.е. элементы массива длиной N имеют индексы от 0 до (N-1)
[code]
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++;
};
};[/code]
Вот как-то так. Поскольку числа - либо неотрицательные, либо отрицательные (третьего не дано), то после вынесение в начало всех неотрицательных элементов, все отрицательные автоматически окажутся после них.