Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2009, 02:20   #1
Frame1992
Пользователь
 
Аватар для Frame1992
 
Регистрация: 21.09.2009
Сообщений: 31
По умолчанию О сортировке массивов в C++

Товарищи, я вот вас о чем хотел спросить...Задача: отсортировать массив по возрастанию. Если же в массиве встречаются одинаковые элементы, то программа должна отбросить повторяющиеся значения, при этом количество элементов в массиве должно быть скорректировано.

Ну прога должна выполнить следующее:
пусть дан массив 1 9 5 2 1 5
она на выходе должна выдать массив 1 2 5 9

вот что я уже написал по этому поводу
Код:
#include <stdio.h>
#include<conio.h>
void main()
{
clrscr();
int n,i,imin,j,k;
float mas[100], buf, max;
printf("\nVvedite n   ");
scanf("%d", &n);

   printf("\nVvedite massiv \n");  //заполняю
   for (i=0; i<n;i++)                  //
   scanf("%f", &mas[i]);            //



  for (i=0; i<(n-1); i++)
   {
   imin=i;
   for (j=i+1;j<n; j++)
    if (mas[j]<mas[imin]) imin=j;
   buf=mas[i];                        //сортирую
   mas[i]=mas[imin];               //
   mas[imin]=buf;                   //
   }

   k=n;
   i=0;
 
 какой цикл воткнуть сюда?!?!?

}

Последний раз редактировалось Frame1992; 28.10.2009 в 09:45.
Frame1992 вне форума Ответить с цитированием
Старый 28.10.2009, 07:52   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
какой цикл воткнуть сюда?!?!?
А что собсно он делать должен?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.10.2009, 08:07   #3
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Цитата:
Ну прога должна выполнить следующее:
пусть дан массив 1 9 5 2 1 5
она на выходе должна выдать массив 1 2 5 9
Если так отсортировать,то это сортировка по возрастанию(по крайней мере я так думаю),а вам надо
Цитата:
Задача: отсортировать массив по убыванию.
Хммм...если надо корректировать количество элементов,то необходимо создавать динамический массив и написать процедуру для корректировки количества элементов(удаления к-того элемента) динамического массива...
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 28.10.2009, 09:50   #4
Frame1992
Пользователь
 
Аватар для Frame1992
 
Регистрация: 21.09.2009
Сообщений: 31
По умолчанию

Ребят, прога не должна содержать подпрограммы..Тут прост надо цикл забубенить такой, чтоб он корректировал количество элементов. Ну или хотя бы вместо массива 1 9 5 2 1 5 выводил 1 2 5 9 0 0. А может и вообще через два массива, в первом будут 1 9 5 2 1 5, а во втором 1 2 5 9

Последний раз редактировалось Frame1992; 28.10.2009 в 09:52.
Frame1992 вне форума Ответить с цитированием
Старый 28.10.2009, 10:52   #5
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Код:
 for (i=0; i<(n-1); i++)
   {
   imin=i;
   for (j=i+1;j<n; j++)
    if (mas[j]<mas[imin]) imin=j;
   buf=mas[i];                        //сортирую
   mas[i]=mas[imin];               //
   mas[imin]=buf;                   //
   }

   k=n;
   i=0;
 
 какой цикл воткнуть сюда?!?!?
Попробуйте вместо этого
Код:
k=n;
for (i=0; i<(n-1); i++)
for (j=i+1;j<n; j++)
     if (mas[i]==mas[j])       //В результате этого
      {
        for(l=j;l<k; l++)       //у Вас будут
        mas[l]=mas[l+1];   //выброшены равные элементы
        k--;                      // и подсчитан новый упорядоченный массив
       }
 
for (i=0; i<(k-1); i++)
   {
   imin=i;
   for (j=i+1;j<k; j++)
    if (mas[j]<mas[imin]) imin=j;
   buf=mas[i];                        //сортирую
   mas[i]=mas[imin];               //
   mas[imin]=buf;                   //
   }
}
Дальше цикл до k для вывода
Проверить сейчас правильность не могу
Неприятности приходят и уходят, а жизнь продолжается!

Последний раз редактировалось Sweta; 28.10.2009 в 11:47.
Sweta вне форума Ответить с цитированием
Старый 28.10.2009, 15:20   #6
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Держите работающую рограмму.
Код:
#include <stdio.h>
#include<conio.h>
void main()
{
clrscr();
int n,i,imin,j,k;
float mas[100], buf, max;
printf("\nVvedite n   ");
scanf("%d", &n);
printf("\nVvedite massiv \n");  //заполняю
for (i=0; i<n;i++)                  //
   scanf("%f", &mas[i]);            //
for (i=0; i<(n-1); i++)
   {
   imin=i;
   for (j=i+1;j<n; j++)
    if (mas[j]<mas[imin]) imin=j;
   buf=mas[i];                        //сортирую
   mas[i]=mas[imin];               //
   mas[imin]=buf;                   //
   }

  k=n;
for (i=0; i<n; i++)

     if (mas[i]==mas[i+1])       //В результате этого
      {
        for(j=i;j<n; j++)       //у Вас будут
        mas[j]=mas[j+1];   //выброшены равные элементы
        k--;                      // и подсчитан новый упорядоченный массив
        i--;
      n--;
       }


for (i=0; i<k; i++)
   printf("%f\n", mas[i]);

   getch();
}
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 28.10.2009, 16:50   #7
Frame1992
Пользователь
 
Аватар для Frame1992
 
Регистрация: 21.09.2009
Сообщений: 31
По умолчанию

Спасибо большое))
Frame1992 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь в сортировке 777Артём777 Общие вопросы Delphi 4 14.03.2009 09:39
Двумерный массив в сортировке anco Паскаль, Turbo Pascal, PascalABC.NET 21 21.06.2008 00:49
Вопрос по сортировке Ermiss БД в Delphi 5 17.02.2008 17:32
Ошибка в сортировке Veiron Общие вопросы Delphi 14 21.01.2008 21:35