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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2009, 15:30   #1
MagistrSave
 
Аватар для MagistrSave
 
Регистрация: 08.05.2009
Сообщений: 4
Восклицание "Хитрая" сортировка

Из массива путем однократного просмотра выбирается последовательность элементов, расположенных в порядке возрастания, переносится в выходной массив и заменяется во входном на -1. Затем оставшиеся элементы включаются в полученную упорядоченную последовательность методом "погружения", когда очередной элемент путем ряда обменов "погружается" до требуемой позиции в уже упорядоченную часть массива.
Прошу, кто понимает о чем идет речь написать мысли...Заранее благодарен.
MagistrSave вне форума Ответить с цитированием
Старый 08.05.2009, 15:50   #2
MagistrSave
 
Аватар для MagistrSave
 
Регистрация: 08.05.2009
Сообщений: 4
По умолчанию

Сортировку я написал, а дальше никак не пойму что куда...
Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <windows.h>
#include "dos.h"
#define n 5
#define m 5
void main()
{
int a[n],i,k,buf;
printf("\nSortirovka \n");
randomize();
for(i = 0;i < n;i++)
{
 a[i]=random(10);
 printf("%2i",a[i]);
}
printf("\n");
for(i = 0;i < n;i++)
{
 for(k = 0;k < n;k++)
 {
  if (a[k]>a[k+1])
  {
   buf=a[k];
   a[k]=a[k+1];
   a[k+1]=buf;
  }
 }
}
for(k = 0;k < n;k++)
 printf("%2i",a[k]);
 printf("\n");
system("PAUSE");
}
MagistrSave вне форума Ответить с цитированием
Старый 08.05.2009, 16:21   #3
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сортировку я написал, а дальше никак не пойму что куда...
А дальше ничего и не надо. Суть задачи - в сортировке. Вы написали сортировку пузырьком, а надо по тому алгоритму, что приведен в задании.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 08.05.2009, 17:01   #4
MagistrSave
 
Аватар для MagistrSave
 
Регистрация: 08.05.2009
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
А дальше ничего и не надо. Суть задачи - в сортировке. Вы написали сортировку пузырьком, а надо по тому алгоритму, что приведен в задании.
Спосибо, попытаюсь разобраться.
MagistrSave вне форума Ответить с цитированием
Старый 08.05.2009, 21:05   #5
("")(Э_Є)("")
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 112
По умолчанию

Лучше списком. Щя мож набрасаю схемку.
("")(Э_Є)("") вне форума Ответить с цитированием
Старый 08.05.2009, 21:54   #6
("")(Э_Є)("")
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 112
По умолчанию

Не, рисовать влом. Напишу буквами

Как простой вариант:

Данные нужно представить двухмерным массивом: "1" Значение "2" смещение.
размещаем значения "1" в массиве от 1-рвого элемента массива до N, ноль резервируем.
заполняем смещение "2" всех элементов массива единицами ->
Проходим по массиву сначала в конец, с шагом взятым из "2" смещение каждого элемента ->
запоминаем начало последовательности(элемент "А" находящийся перед первым элементом последовательности) первой попавшейся упорядоченной последовательности -> доходим до ее конца - > записываем в элемент "А" во "2" смещение количество элементов в упорядочено последовательности - >
Сохраняем последовательность в список ( находим правильное место по "1" значению начала и конца последовательности) ->
повторяем пока элементы не кончатся.


Это перво, что пришло в голову.

Последний раз редактировалось ("")(Э_Є)(""); 08.05.2009 в 21:56.
("")(Э_Є)("") вне форума Ответить с цитированием
Старый 08.05.2009, 23:54   #7
MagistrSave
 
Аватар для MagistrSave
 
Регистрация: 08.05.2009
Сообщений: 4
По умолчанию

Цитата:
Сообщение от ("")(Э_Є)("") Посмотреть сообщение
Не, рисовать влом. Напишу буквами

Как простой вариант:

Данные нужно представить двухмерным массивом: "1" Значение "2" смещение.
размещаем значения "1" в массиве от 1-рвого элемента массива до N, ноль резервируем.
заполняем смещение "2" всех элементов массива единицами ->
Проходим по массиву сначала в конец, с шагом взятым из "2" смещение каждого элемента ->
запоминаем начало последовательности(элемент "А" находящийся перед первым элементом последовательности) первой попавшейся упорядоченной последовательности -> доходим до ее конца - > записываем в элемент "А" во "2" смещение количество элементов в упорядочено последовательности - >
Сохраняем последовательность в список ( находим правильное место по "1" значению начала и конца последовательности) ->
повторяем пока элементы не кончатся.


Это перво, что пришло в голову.
Очень интересно, спасибо =)
MagistrSave вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
блок "cont" с права не принимает значение "margin: 10px;" которое описано в body tabikA HTML и CSS 5 24.02.2009 21:50
Под прикрытием "кризиса" наши доблестные "управители" хотят утопить нас в радиоактивных отходах mihali4 Свободное общение 1 17.01.2009 01:43
Сортировка массива способом Шелла "степени двойки" xxxPascalxxx Помощь студентам 2 15.11.2008 21:58
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует skobets Общие вопросы C/C++ 2 03.06.2008 06:51