0 / 0 / 0
Регистрация: 28.03.2017
Сообщений: 15
1

Quick sort

03.05.2018, 19:20. Показов 2002. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
!Хелпаните с сортировкой выдает ошибку !

Pascal
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
USES Windows;
{---------------------------------------------------------}
CONST
        MaxNumber = 700000;
        Size = 128000;
{---------------------------------------------------------}
VAR
        start,finish,res:int64;
        i,j,t:longint;
        BaseArray:array[1..size] of longint;
Procedure Exchange(a,b:longint);
VAR
        tmp:longint;
Begin
        tmp:=BaseArray[a];
        BaseArray[a]:=BaseArray[b];
        BaseArray[b]:=tmp;
end;
BEGIN
        Randomize;
        Repeat
                Writeln('1:Упорядочные');
                Writeln('2:Обратный порядок');
                Writeln('3:Вырожденные');
                Writeln('4:Случайные');
                readln(t);
        Until (t=1) or (t=2) or (t=3) or (t=4);
       randomize;
 Case t of
  1:
      begin
       BaseArray[1] := MaxNumber;
       for i := 2 to Size do
         BaseArray[i] := BaseArray[i-1]-random(MaxNumber div Size)-1
      end;
  2:
    begin
      BaseArray[1] := 1;
      for i := 2 to Size do
        BaseArray[i] := BaseArray[i-1]+random(MaxNumber div Size)+1
    end;
  3:
   begin
    for i := 1 to Size do
      BaseArray[i] := random(12)+1;
    end;
  4:
    begin
     for i := 1 to Size do
       BaseArray[i] := random(MaxNumber)+1
    end;
  End;
 
QueryPerformanceFrequency(res);
QueryPerformanceCounter(start);
 
{Сортировка}
 
Procedure QuickSort(LBound, UBound:Longint);
 
begin
  i := LBound;
  j := UBound;
repeat
  while i <> j do
    if BaseArray[i] >= BaseArray[j] then
      dec(j);
    else begin
      Exchange(i, j);
      break
   end;
 
  while i <> j do
    if BaseArray[i] >= BaseArray[j] then
      inc(i);
    else begin
      Exchange(i, j);
      break
   end;
until i = j;
if i - 1 > LBound then
QuickSort(LBound, i - 1);
if j + 1 < UBound then
QuickSort(j + 1, UBound)
end;
QueryPerformanceCounter(finish);
{proverka}
if t = 1 then
  begin
    for i :=1 to Size-1 do
        if BaseArray[i]<BaseArray[i+1] then
          begin
            writeln('Error!');
            halt
          end;
  end;
  for j:=1 to Size do
        write(BaseArray[j],' ');
  Readln;
  Writeln('----------------------------------------');
  Writeln('time:',(finish-start)*1000/res:10:10,'ms');
  readln;
  End.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.05.2018, 19:20
Ответы с готовыми решениями:

В функцию sort не передается значения массива из другой функции
Подскажите пжлст почему в процедуру sort не передаются значения массива из процедуры vyb var ...

Quick sort c++
Добрый день. Есть вопрос, как можно реализовать Quick sort с подсчётом перестановок. По условию...

Quick sort Java
Что такое Quick sort in Java? С чем его едят? Может у кого будут более менее понятные примеры по...

Сортировка Quick Sort
Можно написать код и коментами.

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32626 / 21093 / 8139
Регистрация: 22.10.2011
Сообщений: 36,356
Записей в блоге: 8
03.05.2018, 20:30 2
Лучший ответ Сообщение было отмечено xWelYx как решение

Решение

Цитата Сообщение от xWelYx Посмотреть сообщение
выдает ошибку !
Правильно делает. Не надо ставить саму процедуру сортировки, нужен только ее вызов, а процедура должна быть описана выше по тексту. Как-то так:

Pascal
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
USES Windows;
{---------------------------------------------------------}
CONST
        MaxNumber = 700000;
        Size = 128000;
{---------------------------------------------------------}
VAR
        start,finish,res:int64;
        i,j,t:longint;
        BaseArray:array[1..size] of longint;
Procedure Exchange(a,b:longint);
VAR
        tmp:longint;
Begin
        tmp:=BaseArray[a];
        BaseArray[a]:=BaseArray[b];
        BaseArray[b]:=tmp;
end;
 
{Сортировка}
 
Procedure QuickSort(LBound, UBound:Longint);
 
begin
  i := LBound;
  j := UBound;
repeat
  while i <> j do
    if BaseArray[i] >= BaseArray[j] then
      dec(j)
    else begin
      Exchange(i, j);
      break
   end;
 
  while i <> j do
    if BaseArray[i] >= BaseArray[j] then
      inc(i)
    else begin
      Exchange(i, j);
      break
   end;
until i = j;
if i - 1 > LBound then
QuickSort(LBound, i - 1);
if j + 1 < UBound then
QuickSort(j + 1, UBound)
end;
 
 
BEGIN
        Randomize;
        Repeat
                Writeln('1:Упорядочные');
                Writeln('2:Обратный порядок');
                Writeln('3:Вырожденные');
                Writeln('4:Случайные');
                readln(t);
        Until (t=1) or (t=2) or (t=3) or (t=4);
       randomize;
 Case t of
  1:
      begin
       BaseArray[1] := MaxNumber;
       for i := 2 to Size do
         BaseArray[i] := BaseArray[i-1]-random(MaxNumber div Size)-1
      end;
  2:
    begin
      BaseArray[1] := 1;
      for i := 2 to Size do
        BaseArray[i] := BaseArray[i-1]+random(MaxNumber div Size)+1
    end;
  3:
   begin
    for i := 1 to Size do
      BaseArray[i] := random(12)+1;
    end;
  4:
    begin
     for i := 1 to Size do
       BaseArray[i] := random(MaxNumber)+1
    end;
  End;
 
QueryPerformanceFrequency(res);
QueryPerformanceCounter(start);
 
QuickSort(1, Size);
 
QueryPerformanceCounter(finish);
{proverka}
if t = 1 then
  begin
    for i :=1 to Size-1 do
        if BaseArray[i]<BaseArray[i+1] then
          begin
            writeln('Error!');
            halt
          end;
  end;
  for j:=1 to Size do
        write(BaseArray[j],' ');
  Readln;
  Writeln('----------------------------------------');
  Writeln('time:',(finish-start)*1000/res:10:10,'ms');
  readln;
  End.
(проверить не могу, Windows нету, а у тебя все на виндовых гвоздях прибито)
0
0 / 0 / 0
Регистрация: 28.03.2017
Сообщений: 15
03.05.2018, 20:56  [ТС] 3
Компилируется , но не выдает сами цифры сортировки, после выбора сортировки
Миниатюры
Quick sort  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32626 / 21093 / 8139
Регистрация: 22.10.2011
Сообщений: 36,356
Записей в блоге: 8
03.05.2018, 21:01 4
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Жди. Что ж ты хотел для массива из 128 тысяч элементов? Попробуй уменьшить до 200, будет гораздо быстрее
1
0 / 0 / 0
Регистрация: 28.03.2017
Сообщений: 15
03.05.2018, 21:09  [ТС] 5
Ну дождался ахах спасибо
Миниатюры
Quick sort  
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.05.2018, 21:09
Помогаю со студенческими работами здесь

Quick sort using vectors
Now that you have learned about three sorting algorithms with quadratic time complexity (Bubble,...

Quick Sort, рекурсия
Помогите пожалуйста с рекурсией, пишу Быструю Сортировку, все нормально работает до второго вызова...

Реализация алгоритма Quick sort
пожалуйсто напишите алгоритм Quick sort

Нахождения медианы quick sort
При попытке найти медиану процесс начинает грузить процессор. Деббагер показывает на линию, где...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru