Сортировка Шелла (реализация на Java)

Java   24 Февраль 2012  Автор статьи:  

Реализация сортировки Шелла в языке программирования java не имеет никаких особенностей. Можно прям взять код из статьи Сортировка Шелла (реализация на C++).

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
import java.io.PrintWriter;
import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        // Для считывания данных воспользуемся классом Scanner
        // Для вывода - классом PrintWriter(как и во всех статьях по алгоритмам)
        Scanner scanner = new Scanner(System.in);
        PrintWriter printWriter = new PrintWriter(System.out);

        // Считываем размер массива,
        // который необходимо отсортировать
        int size = scanner.nextInt();

        // Создаем массив размера size
        // для хранения чисел
        int[] a = new int[size];

        // Считываем массив
        for (int i = 0; i < size; i++) {
            a[i] = scanner.nextInt();
        }

    int step = size / 2;//инициализируем шаг.
    while (step > 0)//пока шаг не 0
    {
      for (int i = 0; i < (size - step); i++)
                {
                    int j = i;
                    //будем идти начиная с i-го элемента
                    while (j >= 0 && a[j] > a[j + step])
                    //пока не пришли к началу массива
                    //и пока рассматриваемый элемент больше
                    //чем элемент находящийся на расстоянии шага
                    {
                        //меняем их местами
                        int temp = a[j];
                        a[j] = a[j + step];
                        a[j + step] = temp;
                        j--;
                    }
                }
                step = step / 2;//уменьшаем шаг
            }    
        // Выводим отсортированный массив
        for (int i = 0; i < size; i++) {
            printWriter.print(a[i] + " ");
        }

        // После выполнения программы необходимо закрыть
        // потоки ввода и вывода
        scanner.close();
        printWriter.close();
    }
}

  • Kasmarkel

    Спасибо. Пригодилось.

  • Kasmarkel

    Спасибо. Пригодилось.

  • Кирилл

    Спасибо.
    Небольшая ошибка у вас.

    42 строка должна быть j -= step;

Научиться программировать

  • на Delphi

  • на Java

  • на C++