2 / 2 / 1
Регистрация: 23.09.2012
Сообщений: 34
1

Заменить сортировку вставками сортировкой пузырьком

27.10.2012, 23:22. Показов 1725. Ответов 3
Метки нет (Все метки)

Есть решение задачи, где я хочу заменить сортировку вставками сортировкой пузырьком. Написал так:
Вариант 21.
Ввести последовательность натуральных чисел {Aj}j=1...n (n<=1000). Упорядочить последовательность по невозрастанию первой цифры числа, числа с одинаковыми первыми цифрами дополнительно упорядочить по невозрастанию суммы цифр числа, числа с одинаковыми первыми цифрами и одинаковыми суммами цифр дополнительно упорядочить по невозрастанию самого числа.
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
program main;
 
//True - требуется перестановка. Иначе - False.
function Compare(const Num1, Num2 : Word) : Boolean;
const
  Base = 10;
var
  Num, Dig1, Dig2, Sum1, Sum2 : Word;
begin
  //Параметрты первого числа.
  Num := Num1;
  Sum1 := 0;
  repeat
    Dig1 := Num mod Base;
    Sum1 := Sum1 + Dig1;
    Num := Num div Base;
  until Num = 0;
  //Параметрты второго числа.
  Num := Num2;
  Sum2 := 0;
  repeat
    Dig2 := Num mod Base;
    Sum2 := Sum2 + Dig2;
    Num := Num div Base;
  until Num = 0;
 
  Compare := False;
  if Dig1 < Dig2 then //Сравнение старших разрядов.
    Compare := True
  else if Dig1 = Dig2 then begin
    if Sum1 < Sum2 then //Сравнение сумм.
      Compare := True
    else if Sum1 = Sum2 then begin
      if Num1 < Num2 then //Сравнение чисел.
        Compare := True
    end;
  end;
end;
 
const
  M = 8;
  const c:array[1..M] of Word=(1101,221,401,5505, 505, 41, 50, 111);
var
  Arr : array[1..M] of Word;
  i, j : Integer;
  Num : Word;
  S : String;
  temp:Integer;
begin
  repeat
    Writeln('Исходный массив:');
    for i := 1 to M do begin
      Arr[i] := c[i];
      if i > 1 then Write(', ');
      Write(Arr[i]);
    end;
    Writeln;
 
    //Сортировка методом вставок.
    {for i := 1 + 1 to M do 
    begin
      j := i;
      Num := Arr[i];
      while (j > 1) and Compare(Arr[j - 1], Num) do begin
        Arr[j] := Arr[j - 1];
        Dec(j);
      end;
      Arr[j] := Num;
    end;}
    
    //Сортировка пузырьком
    for i:=1 to M-1 do
      for j:=1 to M-i do
        begin
          if Compare(arr[i],arr[i+1]) then
            begin
              temp:=arr[i];
              arr[i]:=arr[i+1];
              arr[i+1]:=temp;
            end;
        end;
 
    Writeln('Массив после сортировки:');
    for i := 1 to M do begin
      if i > 1 then Write(', ');
      Write(Arr[i]);
    end;
    Writeln;
 
    Writeln('Повторить - Enter. Выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.
При такой форме сортировки пузырьком результат получается неверным. Зато при такой записи резльтаты сортировки вставками и пузырьком совпадают. Почему так? Как здесь должна выглядеть сортировка пузырьком?
Pascal
1
2
3
4
5
6
7
8
9
10
11
    //Сортировка пузырьком
    for i:=1 to M-1 do
      for j:=i+1 to M do
        begin
          if Compare(arr[i],arr[j]) then
            begin
              temp:=arr[i];
              arr[i]:=arr[j];
              arr[j]:=temp;
            end;
        end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2012, 23:22
Ответы с готовыми решениями:

Сортировка пузырьком, вставками и выбором в одной программе
Разработать программу с возможностью выбора метода сортировки: Метод пузырька Метод выбора ...

Реализуйте сортировку бинарными вставками
Нужно реализовать сортировку бинарными вставками.

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

Отсортировать пузырьком вставками и своей сортировкой массив
Разработать приложение демонстрирующее работу с одномерный массивом, заполнение массива на форме...

3
3451 / 2389 / 2135
Регистрация: 04.12.2011
Сообщений: 3,966
28.10.2012, 03:58 2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//сортировка "пузырьком"
...
for i:=2 to M do
  for j:=M downto i do
...
 
//еще вариант "пузырька"
...
for i:=M downto 2 do
        for j:=2 to i do
...
 
 
// ваш вариант - это не "пузырек", а линейная сортировка (сортировка отбором)
...
for i:=1 to M-1 do
      for j:=i+1 to M do
...
0
2 / 2 / 1
Регистрация: 23.09.2012
Сообщений: 34
28.10.2012, 20:11  [ТС] 3
Но почему тогда сортировка пузырьком сортирует массив неправильно в отличие от линейной сортировки и сортировки вставками?
Вернее, она сортирует массив в обратном порядке.
0
3451 / 2389 / 2135
Регистрация: 04.12.2011
Сообщений: 3,966
28.10.2012, 20:47 4
В сортироке "пузырьком", как и в линейной, порядок сортировки зависит от того какой знак поставишь, >, <, и какие элементы сравниваешь, предыдущий с последующим, на это и нужно обратить внимание.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2012, 20:47
Помогаю со студенческими работами здесь

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

Сортировать массив символов обменной, карманной сортировкой, сортировкой вставками
Сортировать массив символов обменной, карманной сортировкой, сортировкой вставками . Оценить...

Сортировать числовой файл обменной сортировкой, сортировкой вставками
Уааа, ребят помогите пожалуйста, уже просто мозги кипят не знаю что делать. Задание: ...

Сортировку вставками меняем на Пирамидальную сортировку и на Сортировку подсчётом
Здравствуйте. Я не как не могу разобраться.Помогите. У меня есть листинг сортировки вставками: ...

Сортировку вставками меняем на сортировку слиянием
Код программы выполняет сортировку массива вставками. Как сюда вставить код сортировки массива...

проблемы с сортировкой пузырьком
собственно сабж проблема заключается в том, что программа сортирует ЧАСТЬ массива. Допустим, надо...


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

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

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