Войти

Показать полную графическую версию : [решено] Массивы


zena
30-10-2011, 19:14
У меня проблема вот с этой задачей. Ну совсем ничего не получается:
Задан вещественный массив размера N. Отсортировать все отрицательные элементы в порядке возрастания. Остальные элементы оставить без изменений. Пример: -4 5 -7 9 0 -1 3 -5 2 -6 → -7 5 -6 9 0 -5 3 -4 2 -1

lxa85
30-10-2011, 21:03
zena, а рассуждения где? :)
Что мешает использовать дополнительные массивы?
Вы же не можете на перед угадать, какая будет последовательность и как расставить отрицательные числа, чтобы они шли в порядке возрастания, значит и компьютер не может. Значит надо что-то сделать, чтобы ему помочь.

zena
30-10-2011, 21:07
Ну у меня получилось кое что, но выдаёт бред какойто:
#pragma argsused
#include <stdio.h>
int main(int argc, char* argv[])
{
int array[256];
int index[256],count=0;
int n,i,j,temp;
printf("Input n:");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("Input mas:");
scanf("%d",&array[i]);}
for (i=0;i<n;i++){
if(array[i]>0){
index[count]=i;
count++;}
}
for (i=0;i<count;i++){
for(j=0;j<(count-1);j++){
if(array[index[j]]<array[index[j+1]])
temp=array[index[j]]=array[index[j+1]];
array[index[j+1]]=temp;}
}
printf("%d",array[i]);
getch();
}

lxa85
31-10-2011, 09:47
int array[256];
int index[256],count=0;
int n,i,j,temp; »
ввели переменные.
printf("Input n:");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("Input mas:");
scanf("%d",&array[i]);} »
Ввели массив array
for (i=0;i<n;i++){
if(array[i]>0){
index[count]=i;
count++;}
} »
получили массив индексов положительных величин index.
for (i=0;i<count;i++){
for(j=0;j<(count-1);j++){
if(array[index[j]]<array[index[j+1]])
temp=array[index[j]]=array[index[j+1]];
array[index[j+1]]=temp;}
} »
Пузырьковая сортировка?
Неверно. Раз есть переменные i,j то и надо работать с переменными i, j, а не с j, j+1. От этого только путаница.
И вот это действие тоже не понятно:
temp=array[index[j]]=array[index[j+1]];
array[index[j+1]]=temp;
Масло масляное. Зачем повторное переприсвоение?

Eksworden
31-10-2011, 11:45
Существует очень простое и наглядное решение этой задачи. если нет необходимости писать быстрый алгоритм:
1) используете цикл do{;
2) внутри него цикл for;
3) если число отрицательное ищите следующее отрицательное и если не выполняется условие возрастания меняете их местами, используя дополнительную переменную;
4) выполняете цикл do до тех пор, пока была хотя бы одна перестановка.

lxa85
31-10-2011, 13:01
Eksworden, собственно это тот же "пузырек" только для отрицательных чисел.
А кстати говоря...




© OSzone.net 2001-2012