Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
artUK_off
16 / 16 / 9
Регистрация: 03.06.2011
Сообщений: 59
#1

сортировка - Delphi

01.04.2012, 17:29. Просмотров 473. Ответов 7
Метки нет (Все метки)

процедура для сортировки вставками:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TForm1.Button2Click(Sender: TObject);
var
   i, j, tmp: Integer;
begin
 //сортируем массив
 for i:=0 to StrToInt(s)-1 do
   begin
     j:=i;
     tmp:=mas[i];                             //запоминаем значение ещё неотсортированного элемента
     while ((j>0)and(mas[j-1]<tmp)) do  //Сравниваем очередной отсортированный элемент, если он больше,
       begin
         mas[j]:=mas[j-1];              //то сдвигаем его в большую сторону, освобождая место для вставки
         j:=j-1;                                             //Переходим к следующему элементу в отсортированной части массива
       end;
     mas[j]:=tmp;                            //Место для нового элемента определено - вставляем его туда
   end;
Edit2.Text:='';
 //выводим на экран    
  for i:=0 to StrToInt(s)-1 do
    Edit2.Text:=Edit2.Text+' '+IntToStr(mas[i]);
 
end;
мне требуется поменять неотсортированную часть с отсортированной местами. помогите кто понимает))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2012, 17:29
Я подобрал для вас темы с готовыми решениями и ответами на вопрос сортировка (Delphi):

Сортировка слиянием. трехленточная сортировка. считывание из файла
Сделал только без считывания из файла, как это сделать. Нужна помощь. У меня...

Сортировка файлов Трехленточная сортировка
Реализовать алгоритм трехленточной сортировки исходного файла, содержащего N...

Сортировка "Пузырьком" vs. Сортировка Методом прямого выбора.
Доброго времени суток программисты! У меня тут вопрос. Как вы считаете какой...

Сортировка в memo по маске\Сортировка нескольких связанных memo
Доброго времени! Есть несколько memo, в которых генерируются данные по...

сортировка
Ребят помогите кто нибудь не могу понять чего не сортирует массив, выкидывает...

Сортировка
Разработать программу записи/чтения типизированного файла. Исходные и выходные...

7
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
01.04.2012, 19:54 #2
Вопрос не понял, но, по-моему, нужно строку 10 писать так:
Delphi
1
 while ((j>0)and(mas[j-1]>tmp)) do
0
artUK_off
16 / 16 / 9
Регистрация: 03.06.2011
Сообщений: 59
01.04.2012, 20:59  [ТС] #3
Одиночка, да забыл у меня поубыванию щас сортирует. а про эти отсортированные и неотсортированные части сам непонимаю поэтому суда и написал может кто-нибудь знает)
0
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
01.04.2012, 23:06 #4
А можешь полностью озвучить, как была сформулирована задача? Тебе дали этот код...
Потому что я не вижу криминала. Код должен работать.
0
artUK_off
16 / 16 / 9
Регистрация: 03.06.2011
Сообщений: 59
01.04.2012, 23:22  [ТС] #5
Одиночка, да в том то и дело что все работает правильно! это просто задание дополнительное.
может это чемто поможет.
2.2.3. Сортировка включением

В этой сортировке массив делится на 2 части: отсортированную и неотсортированную. На каждом шаге берется очередной элемент из неотсортированной части и «включается» в отсортированную часть массива.
2.2.3.1. Простое включение

Пусть отсортировано начало массива A[1], A[2], ..., A[i-1], а остаток массива A[i], ...,A[n] содержит неотсортированную часть. На очередном шаге будем включать элемент A[i] в отсортированную часть, ставя его на соответствующее место. При этом придется сдвинуть часть элементов, больших A[i], (если таковые есть) на одну позицию правее, чтобы освободить место для элемента A[i]. Но при сдвиге будет потеряно само значение A[i], поскольку в эту позицию запишется первый (самый правый - с самым большим индексом) сдвигаемый элемент. Поэтому прежде чем производить сдвиг элементов необходимо сохранить значение A[i] в промежуточной переменной.

Так как массив из одного элемента можно считать отсортированным, начнем с i=2.

Программа будет выглядеть так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
for i := 2 to n do
begin
  Tmp := A[i];
  j := i-1;
  while (A[j]>Tmp)and(j>1) do
  begin
    A[j+1] := A[j];
    Dec(j)
  end;
  A[j+1] := Tmp;
end;
0
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
01.04.2012, 23:34 #6
Так это просто описание метода. Впереди у тебя остаётся отсортированная часть, а на следующем шаге берётся первый элемент из неотсортированной части и вставляется в нужное место отсортированной. При этом отсортированная часть становится на 1 элемент больше, а неотсортированная - меньше. Вот и всё. Довольно подробное описание. Но если тебе ещё и код дали, тогда нужно просто разобраться и всё.
0
artUK_off
16 / 16 / 9
Регистрация: 03.06.2011
Сообщений: 59
01.04.2012, 23:37  [ТС] #7
Одиночка, да в том то и дело что я не могу понять эту всю штуку с отсортированой и неотсортированной последовательностью. поэтому и обратился за помощью
0
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
01.04.2012, 23:48 #8
Ладно смотри (сортируем по убыванию, как у тебя):
Массив: 10,5,11,24,0,13,48,2,6,17
1. Массив из 1-го элемента можно считать отсортированным, т.е.:
10 5,11,24,0,13,48,2,6,17 - левая часть уже отсортирована, правая нет. Хотя это всё находится в одном массиве.
2. Берём 1-й элемент неотсортированной части (5) и вставляем на своё место в отсортированную:
10,5 11,24,0,13,48,2,6,17
3. Берём 1-й элемент неотсортированной части (11) и вставляем на своё место в отсортированную:
11,10,5 24,0,13,48,2,6,17
4. Берём 1-й элемент неотсортированной части (24) и вставляем на своё место в отсортированную:
24,11,10,5 0,13,48,2,6,17
5. Берём 1-й элемент неотсортированной части (0) и вставляем на своё место в отсортированную:
24,11,10,5,0 13,48,2,6,17
6. Берём 1-й элемент неотсортированной части (13) и вставляем на своё место в отсортированную:
24,11,10,5,0,13 48,2,6,17 и так до конца.
0
01.04.2012, 23:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2012, 23:48
Привет! Вот еще темы с решениями:

Сортировка

Сортировка
При нажатии на 4 кнопку, должно сортировать по возростнию, но ничего не...

Сортировка

Сортировка
Var A,B:array of byte; C:array of integer; N,i:integer; Begin...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru