Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 4
1

Не работает сортировка массива

10.02.2015, 21:02. Показов 414. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер. Не могу понять, почему ни один массив не сортирует правильно. Вот код:

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
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;
 
type
  TForm1 = class(TForm)
    strngrd1: TStringGrid;
    btn1: TButton;
    lbl1: TLabel;
    edt1: TEdit;
    btn2: TButton;
    btn3: TButton;
    btn4: TButton;
    btn5: TButton;
    btn6: TButton;
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
    procedure btn4Click(Sender: TObject);
    procedure btn5Click(Sender: TObject);
    procedure btn6Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.btn1Click(Sender: TObject);    //Сортировка вставками
Var a,b : array[1..1000] of integer; 
    n,i,j : integer;
Begin
  n:=StrToInt(edt1.text);
  for i:=1 to n do
    begin
      a[i]:=Random(200);
      strngrd1.Cells[i-1,0]:=inttostr(a[i]);
    end;
    for i:=1 to N do
      begin
        j:=i;
        while (j>1) and (a[j-1]>A[i]) do
          begin
            a[j]:=a[j-1];
            j:=j-1;
          end;
 
          strngrd1.Cells[j-1,1]:=inttostr(a[j]);
      end;
 
end;
 
procedure TForm1.btn2Click(Sender: TObject);  //Пузырьковая сортировка
Var A : array[1..1000] of integer; 
    N,i,j,p : integer;
begin
  n:=StrToInt(edt1.text);
  for i:=1 to n do
    begin
      a[i]:=Random(50);
      strngrd1.Cells[i,0]:=inttostr(a[i]);
    end;
    for i:=1 to n do
      for j:=1 to n-i do
        if A[j]>A[j+1] then
          begin
            p:=A[j];
            A[j]:=A[j+1];
            A[j+1]:=P;
          end;
          strngrd1.Cells[j,1]:=inttostr(a[j]);
end;
 
procedure TForm1.btn3Click(Sender: TObject);  //Сортировка Шейкером
Var A : array[1..1000] of integer;
    N,i,j,p : integer;
    Min, Max : integer;
begin
  n:=StrToInt(edt1.text);
  for i:=1 to n do
    begin
      a[i]:=Random(20)-20;
      strngrd1.Cells[i-1,0]:=inttostr(a[i]);
    end;
    for i:=1 to n div 2 do
      begin
        if A[i]>A[i+1] then
          begin
            Min:=i+1;
            Max:=i;
          end
        else
          begin
            Min:=i;
            Max:=i+1;
          end;
          for j:=i+2 to n-i+1 do
            if A[j]>A[Max] then
              Max:=j
            else
              if A[j]<A[Min] then
                Min:=j;
                P:=A[i];
                A[i]:=A[min];
                A[min]:=P;
                if max=i then
                  max:=min;
                  P:=A[N-i+1];
                  A[N-i+1]:=A[max];
                  A[max]:=P;
      end;
      strngrd1.Cells[j,1]:=inttostr(a[p]);
end;
 
 
Procedure Sort(p,q : integer);      //Быстрая сортировка
Var a:array[1..1000] of Integer;
    i,j,r,t : integer;
Begin
  if p<q then
    begin
      r:=A[p];
      i:=p-1;
      j:=q+1;
      while i<j do
        begin
          repeat
            i:=i+1;
          until A[i]>=r;
            repeat
              j:=j-1;
            until A[j]<=r;
              if i<j then
                begin
                  T:=A[i];
                  A[i]:=A[j];
                  A[j]:=T;
                end;
        end;
        Sort(p,j);
        Sort(j+1,q);
    end;
End; 
 
procedure TForm1.btn4Click(Sender: TObject);
Var A : array[1..1000] of integer; 
    N,T,i,p,q,j : integer;
begin
  n:=StrToInt(edt1.text);
  for i:=1 to n do
    begin
      a[i]:=Random(20)-20;
      strngrd1.Cells[i-1,0]:=inttostr(a[i]);
    end;
    Sort(1,N);
    strngrd1.Cells[j,1]:=inttostr(a[t]);
end;
 
 
procedure TForm1.btn5Click(Sender: TObject); //Сортировка подсчетом
Var A,B : array[1..1000] of byte;
    C : array[byte] of integer;
    N,i : integer;
begin
  n:=StrToInt(edt1.text);
  for i:=1 to n do
    begin
      a[i]:=Random(20)-20;
      strngrd1.Cells[i-1,0]:=inttostr(a[i]);
    end;
    for i:=0 to 255 do
      C[i]:=0;
      for i:=1 to N do
        C[A[i]]:=C[A[i]]+1;
        for i:=1 to 255 do
          C[i]:=C[i-1]+C[i];
          for i:=N downto 1 do
            begin
              B[C[A[i]]]:=A[i];
              C[A[i]]:=C[A[i]]-1;
            end;
            strngrd1.Cells[i-1,1]:=inttostr(b[i]);
 
end;
 
procedure TForm1.btn6Click(Sender: TObject);   //Сортировка по возрастанию
var a:array [1..1000] of Integer;
    i, j,n, t: integer;
begin
  n:=StrToInt(edt1.text);
  for i:=1 to n do
    begin
      a[i]:=Random(20)-20;
      strngrd1.Cells[i-1,0]:=inttostr(a[i]);
    end;
   for i:=1 to n-1 do 
     for j:=i+1 to n do
       if (a[i]>a[j]) then
         begin
           t := a[i];
           a[i] := a[j];
           a[j] := t;
         end;
         strngrd1.Cells[i-1,1]:=inttostr(a[i]);
 
end;
 
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.02.2015, 21:02
Ответы с готовыми решениями:

не правильно работает (сортировка массива вставкой)
задача: да одномерный произвольный числовой массив. организовать его сортировку по возростанию и...

Подкючение модуля. Не работает сортировка массива
Есть подключеный модуль в котором есть процедура для сортировки массива (числа вводим в StringGrid...

Не работает сортировка массива
program pro1; uses op,obrabotki; begin writeln ('Введите количесвто элементов массива');...

Не работает сортировка массива
program pr2; uses crt; const m=500; type mas=array of integer; var a:mas; n,i,j,x,k:integer; ...

1
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
11.02.2015, 07:55 2
Например, метод TForm1.btn1Click(). В нём в строке № 58 выполняется распечатка массива, сортировка которого ещё не завершена. Сначала надо завершить сортировку, а потом распечатать массив.
Кроме этого в методе TForm1.btn1Click() происходят потери значений из-за того, что перед циклом по j значение A[i] не сохраняются в отдельную переменную. И после цикла по j на 57-й строке должна быть запись сохранённого значения в элемент A[j]. Этого действия в коде нет.

Добавлено через 1 минуту
В методе TForm1.btn1Click() происходит распечатка только одного значения, а не всего массива.

Добавлено через 2 минуты
И во всех других методах тоже распечатывается только одно значение. Во всех случаях надо создать цикл и в нём распечатать элементы массива.
1
11.02.2015, 07:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.02.2015, 07:55
Помогаю со студенческими работами здесь

Не работает сортировка массива
В общем задача такая: Удалить нули и сортировать по убыванию. Почему не работает сортировка, что...

Сортировка массива не работает
написал алгоритм для сортировки массива , он не сортирует , почему? const n=5; type mas=array ...

Не работает сортировка массива структур
была предпринята попытка написать функцию сортировки массива структур, но программа работает...

Сортировка массива работает неверно!
#include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; #include &lt;cmath&gt; main () { ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru