19 / 19 / 3
Регистрация: 11.11.2012
Сообщений: 253
1

Карманная сортировка

25.11.2013, 12:43. Показов 2783. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть 2 процедуры - 1 для сортировки карманов вторая для сортировки массиву методом карманной сортировки.
Ошибок нет но результат - массив не сортируется. Помогите исправить
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
procedure QSort(first,last:integer);
      var
         L,R,c,X:integer;
      begin
         if first < last then
         begin
            X:= b[i,(first + last) div 2];
            L:= first;
            R:= last;
            while L <= R do
            begin
                while b[i,L] < X do
                   L:= L + 1;
                while b[i,R] > X do
                   R:= R - 1;
                if L <= R then
                begin
                   c:=b[i,L];
                   b[i,L]:=b[i,R];
                   b[i,R]:=c;
                   L:=L+1;
                   R:=R-1;
                end;
             end;
     QSort(first, R);
     QSort(L, last);
     end;
   end;
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
Procedure BucketSort(var m:array[1..10]of word);
begin
for i:=1 to n do
      begin
         b[(a[i] div 10)+1,razmer[(a[i] div 10)+1]+1]:=a[i];
         razmer[(a[i] div 10)+1]:=razmer[(a[i] div 10)+1]+1;
      end;
      for i:=1 to 10 do
         if razmer[i]<>0 then Qsort(1,razmer[i]);
      k:=0;
      for i:=1 to 10 do
      for j:=1 to razmer[i] do
      begin
         k:=k+1;
         a[k]:=b[i,j];
      end;
end;
Procedure Swap(Var a, b: word);
Var p: word;
begin
  p := a;
  a := b;
  b := p;
end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.11.2013, 12:43
Ответы с готовыми решениями:

Блок схема.Сортировка «Пузырьком», Сортировка методом «Последовательных перестановок», Сортировка «Вставками»
Помогите, нужны блок схемы Сортировка «Вставками» Program Vstavka; uses dos; Type mass=array ...

1)Бинарный поиск 2)Сортировка включением 3)Шейкерная сортировка 4)Сортировка разделением
1)В заданном массиве К(N) найти индексы элементов, которые кратны минимальному значению элемента...

Карманная сортировка
Помогите разработать программную реализацию алгоритма карманной сортировки вещественных чисел из...

Карманная сортировка
Здравствуйте, нужно написать програму на Паскале, которая сортирует масив методом Блочной...

13
1 / 1 / 1
Регистрация: 25.11.2013
Сообщений: 5
25.11.2013, 15:00 2
Целиком код программы можно?
0
19 / 19 / 3
Регистрация: 11.11.2012
Сообщений: 253
26.11.2013, 00:32  [ТС] 3
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
109
110
111
112
113
114
115
116
uses crt;
const n=10;
var mass : array [1..n] of word;
    i, j, x ,k: integer;
     a:array[1..10] of word;
     b:array[1..10,1..10] of word;
     razmer:array[1..1000] of word;
procedure QSort(first,last:integer);
      var
         L,R,c,X:integer;
      begin
         if first < last then
         begin
            X:= b[i,(first + last) div 2];
            L:= first;
            R:= last;
            while L <= R do
            begin
                while b[i,L] < X do
                   L:= L + 1;
                while b[i,R] > X do
                   R:= R - 1;
                if L <= R then
                begin
                   c:=b[i,L];
                   b[i,L]:=b[i,R];
                   b[i,R]:=c;
                   L:=L+1;
                   R:=R-1;
                end;
             end;
     QSort(first, R);
     QSort(L, last);
     end;
   end;
Procedure BucketSort(var m:array[1..10]of word);
begin
for i:=1 to n do
      begin
         b[(a[i] div 10)+1,razmer[(a[i] div 10)+1]+1]:=a[i];
         razmer[(a[i] div 10)+1]:=razmer[(a[i] div 10)+1]+1;
      end;
      for i:=1 to 10 do
         if razmer[i]<>0 then Qsort(1,razmer[i]);
      k:=0;
      for i:=1 to 10 do
      for j:=1 to razmer[i] do
      begin
         k:=k+1;
         a[k]:=b[i,j];
      end;
end;
Procedure Swap(Var a, b: word);
Var p: word;
begin
  p := a;
  a := b;
  b := p;
end;
 
procedure CreateArr;
const arr:array[1..10]of word = (1235,2345,3462,42415,4214,2425,12412,4200,1255,24456);
var a:byte;
 begin
  randomize;
  WriteLn('1. Створення');
  WriteLn('   - Випадкове заповнення');
  WriteLn('   - Масив -константа');
  readln(a);
  case a of
  1:begin
  for i:= 1 to n do
     mass[i] := random(65535);
  writeln('Масив створено');
    end;
  2: begin
  for i:= 1 to n do
     mass[i] := arr[i];
  writeln('Масив створено');
     end;
 end;
 end;
Procedure PrintArr(var m:array[1..n] of word );
Begin
 for i:= 1 to n do
      write (m[i],'   ');
writeln;
end;
procedure SelectionSort(var m:array[1..n] of word );
begin
for i:= 1 to n-1 do
    begin
     for j:= i+1 to n do
         if mass[i]>mass[j] then
             swap(m[i],m[j]);
     end;
end;
begin
 
  WriteLn('1. Створення');
  WriteLn('2. Виведення');
  WriteLn('3. Сортування вибором');
  WriteLn('4. Розпод1лбъьне сортування');
  WriteLn('0. Виход');
  Write(' Обер1ть д1ю: ');
repeat
readln (x);
case x of
1:CreateArr();
2:PrintArr(mass);
3:SelectionSort(mass);
4: BucketSort(mass);
0:exit;
end;
 until false;
end.
вот пожалуйста
0
1 / 1 / 1
Регистрация: 25.11.2013
Сообщений: 5
26.11.2013, 14:44 4
Странно что ошибок нет, на сколько я помню паскаль ( а помню я его плохо ), массивы нельзя так передавать в процедуры.
Можно, например, объявить как

Pascal
1
type mass=array[1..10] of word;
а в процедуру вставлять как:
Pascal
1
Procedure someproc (m:mass);
Но я могу ошибаться
Попробуй такой вариант.
0
19 / 19 / 3
Регистрация: 11.11.2012
Сообщений: 253
29.11.2013, 00:46  [ТС] 5
Да нет 1 же процедура работает с таким параметром корректно
0
19 / 19 / 3
Регистрация: 11.11.2012
Сообщений: 253
30.11.2013, 18:31  [ТС] 6
Все еще нужна помощь
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32580 / 21051 / 8131
Регистрация: 22.10.2011
Сообщений: 36,323
Записей в блоге: 8
30.11.2013, 19:31 7
Андрей 94, каким компилятором пользуешься? GPC? Никакой другой не позволяет подобным образом передавать массивы, а GPC под рукой нет. Поэтому тестировалось на FPC:

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
procedure BucketSort(var a : array of word);
var
  Largest : word;
  digits, divisor : integer;
  BucketCount : array[0 .. 9] of Integer;
  Bucket : array[0 .. 9, 0 .. 19] of Integer;
  i, j, k, Pass, r : Integer;
begin
  Largest := a[0];
  for i := 1 to High(a) do
    if a[i] > Largest then Largest := a[i];
 
  digits := 0;
  while Largest > 0 do
  begin
    inc(digits);
    Largest := Largest div 10;
  end;
 
  divisor := 1;
  for pass := 0 to Pred(digits) do
  begin
    for k := 0 to 9 do BucketCount[k] := 0;
    for i := 0 to High(a) do
    begin
      r := (a[i] div divisor) mod 10;
      Bucket[r, BucketCount[r]] := a[i]; Inc(BucketCount[r]);
    end;
 
    i := 0;
    for k := 0 to 9 do
    begin
      writeln(k, ' ', BucketCount[k]);
      for j := 0 to Pred(BucketCount[k]) do
      begin
        a[i]:= Bucket[k, j]; Inc(i);
      end;
    end;
 
    divisor := divisor * 10;
  end;
end;
Это и есть BucketSort, а не то, что ты запрограммировал. Не нужны "блочной сортировке" никакие посторонние алгоритмы, QuickSort, например...
1
19 / 19 / 3
Регистрация: 11.11.2012
Сообщений: 253
30.11.2013, 20:12  [ТС] 8
Цитата Сообщение от UI Посмотреть сообщение
High(a)
Можно заменить на Lenght(a) а то high не понимает
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32580 / 21051 / 8131
Регистрация: 22.10.2011
Сообщений: 36,323
Записей в блоге: 8
30.11.2013, 20:52 9
Нет, Length(a) - 1 тогда уже, High - это максимальный индекс, а поскольку открытый массив всегда индексируется с 0, то надо из длины вычитать единицу.
0
19 / 19 / 3
Регистрация: 11.11.2012
Сообщений: 253
30.11.2013, 20:55  [ТС] 10
неизвестный идентификатор хай
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32580 / 21051 / 8131
Регистрация: 22.10.2011
Сообщений: 36,323
Записей в блоге: 8
01.12.2013, 02:19 11
Я уже задавал вопрос о названии компилятора. Ты его благополучно проигнорировал, проигнорировал и то, что High(a) можно заменить на Length(a) - 1, так чего ты ждешь? Чтобы я подключился к информационному полю, вытащил оттуда информацию, какой там у тебя "хай" неизвестен, каким компилятором ты пользуешься, и выложил тебе на блюдечке решение, чтоб тебе даже пальцем шевелить для исправления High -> Length не пришлось? Ну, жди... Только долго ждать придется... Ибо теперь моя очередь игнорить твои вопросы...
0
19 / 19 / 3
Регистрация: 11.11.2012
Сообщений: 253
01.12.2013, 21:21  [ТС] 12
Цитата Сообщение от UI Посмотреть сообщение
Я уже задавал вопрос о названии компилятора. Ты его благополучно проигнорировал, проигнорировал и то, что High(a) можно заменить на Length(a) - 1, так чего ты ждешь? Чтобы я подключился к информационному полю, вытащил оттуда информацию, какой там у тебя "хай" неизвестен, каким компилятором ты пользуешься, и выложил тебе на блюдечке решение, чтоб тебе даже пальцем шевелить для исправления High -> Length не пришлось? Ну, жди... Только долго ждать придется... Ибо теперь моя очередь игнорить твои вопросы...
а как узнать то какая версия? у меня паскаль абц. но ни ленс-1 ни хай не работают
0
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 5
15.12.2013, 22:16 13
я знаю, что это не тот раздел но все же. помогите. нужен программный код сортировки карманным методом в с++
0
19 / 19 / 3
Регистрация: 11.11.2012
Сообщений: 253
16.12.2013, 09:18  [ТС] 14
тоже нужен
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2013, 09:18
Помогаю со студенческими работами здесь

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

Блочная Карманная Сортировка
сортировать двумерный массив Блочной или Карманной Сортировкой. Кроме того нужно разместить...

Карманная сортировка динамических массивов
Карманная сортировка. Создаете 2 кармана. В 1-й карман включает элементы массива. Во 2-й ...

Карманная сортировка
Помогите почему не работает ? не работает sort(b.begin(), b.end()); ?? #include &lt;iostream&gt;...

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

Карманная сортировка для списка дженериков
Помогите с этой темой, вообще не врубаюсь, как(( Если взять сортировку чисел, то, вроде, не трудно...


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

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

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