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

Сортировка Массива Разными Методами

23.12.2016, 21:30. Просмотров 181. Ответов 1
Метки нет (Все метки)

Доброго Времени Суток, Участники Этого Замечательного Форума)
Моя Задача Заключается В Реализации Сортировки Целочисленного Одномерного Массива, Разными Методами:

1) Сортировка С Помощью Прямого Выбора
2) Сортировка Методом Шелла
3) Сортировка Методом Шейкера

На Данный Момент Я Смог Реализовать Это...

Глобальные Переменные:
Сам Массив, И Переменная Отвечающая За Длину Массива.

Delphi
1
2
3
Var
  Arr: Array[1..15] Of Integer;
  Value_N: Integer;
Есть Поле Для Ввода - Компонент Edit, Туда Мы Будем Указывать Необходимую Длину Массива. (edt_Arr_Size)

Процедура Заполнения Массива Случайными Значениями (Рандом).
А Также Вывод В Многострочное Поле Для Ввода - Компонент Memo. (mmo_Input_Arr)

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
Procedure Generate_Random_Arr;
Var
  I: Integer;
Begin
  Randomize;
  Value_N := StrToInt(frm_Main.edt_Arr_Size.Text);
  For I := 1 To Value_N Do
  Begin
    Arr[I] := random(25);
    frm_Main.mmo_Input_Arr.Text := frm_Main.mmo_Input_Arr.Text + '[' + IntToStr(Arr[I]) + ']';
  End;
End;
Процедура Вывода Результирующего Массива.

Delphi
1
2
3
4
5
6
7
8
9
10
Procedure Output_Result_Arr;
Var
  I: Integer;
Begin
  frm_Main.mmo_Result_Arr.Lines.Clear;
  For I := 1 To Value_N Do
  Begin
    frm_Main.mmo_Result_Arr.Text := frm_Main.mmo_Result_Arr.Text + '[' + IntToStr(Arr[I]) + ']';
  End;
End;
Сортировка С Помощью Прямого Выбора.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Procedure Selection_Sort;
Var
  I, J, Posit, Value: Integer;
Begin
  For I := 1 To Value_N - 1 Do
  Begin
    Posit := I;
    Value := Arr[I];
    For J := I + 1 To Value_N Do
      If (Value > Arr[J]) Then
      Begin
        Posit := J;
        Value := Arr[J];
      End;
    Arr[Posit] := Arr[I];
    Arr[I] := Value;
  End;
End;
Сортировка Методом Шелла.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Procedure Shell_Sort;
Const
  Steps = 12;
Var
  I, J, L, K, Z, Posit, Value: Integer;
  Temp_Arr: Array[1..Steps] Of Integer;
Begin
  K := 1;
  For I := Steps Downto 1 Do
  Begin
    Temp_Arr[I] := K;
    K := K * 2 + 1;
  End;
  For K := 1 To Steps Do
  Begin
    L := Temp_Arr[K];
    For Z := 1 To L Do
    Begin
      I := Value_N - L;
      Posit := 1;
      While Posit > 0 Do
      Begin
        Posit := 0;
        J := Z;
        While J <= I Do
        Begin
          If Arr[J] > Arr[J + L] Then
          Begin
            Value := Arr[J];
            Arr[J] := Arr[J + L];
            Arr[J + L] := Value;
            Posit := 1;
          End;
          J := J + L;
        End;
        I := I - L;
      End;
    End;
  End;
End;
Сортировка Методом Шейкера.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Procedure Shaker_Sort;
Var
  Left, Right, I, Value: Integer;
Begin
  Left := 2;
  Right := Value_N;
  While Left <= Right Do
  Begin
    For I := Left To Right Do
      If (Arr[I] < Arr[I - 1]) Then
      Begin
        Value := Arr[I];
        Arr[I] := Arr[I - 1];
        Arr[I - 1] := Value;
      End;
    Right := Right - 1;
    For I := Right Downto Left Do
      If (Arr[I] < Arr[I - 1]) Then
      Begin
        Value := Arr[I];
        Arr[I] := Arr[I - 1];
        Arr[I - 1] := Value;
      End;
    Left := Left + 1;
  End;
End;
Всё Работает Как Надо!

Теперь Же, Мне Необходимо Сделать Следующее...
Целочисленный Одномерный Массив В Диапазоне От 100.000 До 1.000.000 Элементов, С Шагом 100.000

Delphi
1
2
var Arr: Array[100000..1000000] Of Integer;
Value_N: LongInt;
Так Как Диапазон Большой, Ставлю Тип LongInt.

Теперь Же У Нас Процедура Заполнения Будет Иная. Цикл С ПредУсловием. (While)

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Procedure Generate_Random_Arr;
Var
  I: LongInt;
Begin
  Randomize;
  Value_N := StrToInt(frm_Main.edt_Arr_Size.Text);
  I := 100000;
  While (I <= Value_N) Do
  Begin
    Arr[I] := random(25);
    frm_Main.mmo_Input_Arr.Text := frm_Main.mmo_Input_Arr.Text + '[' + IntToStr(Arr[I]) + ']';
    I := I + 100000;
  End;
End;
Всё Верно, От 100.000 До 1.000.000 (Value_N), И Шаг Переменной I Увеличиваем На 100.000

Также Переделал Процедуру Вывода.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
Procedure Output_Result_Arr;
Var
  I: LongInt;
Begin
  frm_Main.mmo_Result_Arr.Lines.Clear;
  I := 100000;
  While (I <= Value_N) Do
  Begin
    frm_Main.mmo_Result_Arr.Text := frm_Main.mmo_Result_Arr.Text + '[' + IntToStr(Arr[I]) + ']';
    I := I + 100000;
  End;
End;
И Самый Кульминационный Момент ;-)
Помогите Пожалуйста Переделать Те Самые Процедуры Сортировки, Под Данный Массив.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2016, 21:30
Ответы с готовыми решениями:

Сортировка двумя методами
Народ! Помогите кто чем может. Нужно написать программу, которая сортирует...

Сортировка массивов различными методами
Сортировка массивов различными методами

Сортировка массива
Дана таблица. Замените элементы, стоящие на нечетных местах и равные 3,...

Сортировка массива
Нужно создать двумерный массив ,заполнить его цифрами от 1 до 4 чтобы не по...

Сортировка массива
Суть проблемы в том, что надо вывести случайный массив и создать в последствии...

1
Puporev
Модератор
55402 / 42537 / 29392
Регистрация: 18.05.2008
Сообщений: 100,603
24.12.2016, 07:03 2
Цитата Сообщение от UbuntuUser2016 Посмотреть сообщение
Целочисленный Одномерный Массив В Диапазоне От 100.000 До 1.000.000 Элементов, С Шагом 100.000
Это вам просто нужно прогнать все сортировки для массивов размерности
1..100000
1..200000
1..300000
............
1..1000000
И ничего переделывать в сортировках не нужно.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2016, 07:03

Сортировка массива
Так нужно отсортировать массив по убыванию. Подкиньте каких-нибудь идей для...

Сортировка массива
Дан массив (не уточнено какой, но мне кажется лучше двумерный взять)...

Сортировка массива
Данная совокупность положительных и отрицательных чисел. Нужно выбрать...


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

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

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