Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Массивы (http://forum.oszone.net/showthread.php?t=219291)

zena 30-10-2011 19:14 1785179

Массивы
 
У меня проблема вот с этой задачей. Ну совсем ничего не получается:
Задан вещественный массив размера 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 1785238

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

zena 30-10-2011 21:07 1785240

Ну у меня получилось кое что, но выдаёт бред какойто:
Код:

#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 1785519

Цитата:

Цитата zena
int array[256];
int index[256],count=0;
int n,i,j,temp; »

ввели переменные.
Цитата:

Цитата zena
printf("Input n:");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("Input mas:");
scanf("%d",&array[i]);} »

Ввели массив array
Цитата:

Цитата zena
for (i=0;i<n;i++){
if(array[i]>0){
index[count]=i;
count++;}
} »

получили массив индексов положительных величин index.
Цитата:

Цитата zena
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 1785580

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

lxa85 31-10-2011 13:01 1785640

Eksworden, собственно это тот же "пузырек" только для отрицательных чисел.
А кстати говоря...


Время: 00:24.

Время: 00:24.
© OSzone.net 2001-