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

Алгоритмы внутренней сортировки

09.03.2016, 13:23. Показов 775. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую братцы, прошу вас о помощи в одном не сложном дельце, помогите люди добрые с программой, а именно написанием, коль вам не сложно будет. Очень надо, не могу понять как сделать данное задание. =(

ЗАДАНИЕ:
1. Написать программу, реализующую сортировку массива заданным способом
(согласно варианту).
2. Сравнить число сравнений (С) и обменов (М) для числовых массивов, содержа-
щих различное число элементов (20, 500, 1000, 3000, 5000, 10000), выбираемых слу-
чайным образом. Оценить время сортировки.
3. Исследовать влияние начальной упорядоченности массива (отсортированный,
отсортированный в обратном порядке, отсортирован случайным образом).
4. Все полученные данные ввести в таблицу 1. Сравнить эффективности сорти-
ровки массивов разной размерности и упорядоченности. Сделать выводы.

Вариант 9: Сортировка Шелла (ℎ i-1 = 3ℎi + 1: 1,4,13,40,121, … )

Язык программирование в принципе не важен, главное результат =)
Миниатюры
Алгоритмы внутренней сортировки  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.03.2016, 13:23
Ответы с готовыми решениями:

Алгоритм решения задач внутренней сортировки и алгоритмы поиска информации
Ветвление. 1. Дано число m (1 £ m £ 12).Определить, к какому времени года относится месяц с...

Написать две функции сортировки массива целых чисел, реализующих заданные алгоритмы сортировки – один из класса квадрат
#include <stdio.h> #include "stdafx.h" #include "iostream" #include <stdlib.h> #include...

Сортировка и поиск. Методы внутренней сортировки
Народ помогите кто сделать программы а то я совсем замотался блин А можеш сделать В заданном...

Быстрые методы внутренней сортировки, метод Хоара
Народ, помогите пожалуйста с прогами...:) Вопрос жизни или долгой и мучительной смерти..:) Решить...

10
143 / 115 / 61
Регистрация: 13.01.2016
Сообщений: 305
09.03.2016, 13:50 2
JanCover, Вот Вам класс:

Java
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
public class Sorter {
 
    //сортировка пузырьком
    public void bubbleSort(int[] arr) {
        int swaps = 0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                if (arr[i] < arr[j]) {
                    int x = arr[i];
                    arr[i] = arr[j];
                    arr[j] = x;
                    swaps++;
                }
            }
        }
        System.out.println("Sorting by Bubble Methods:");
        for (int anArr : arr) {
            System.out.print(anArr + " ");
        }
        System.out.println("\nSwaps by this methods: " + swaps);
    }
 
    //сортировка методом Шелла
    public void shellSort(int[] arr) {
        int swaps = 0;
        int dim1 = 9;
        int dim2 = 6;
        int dim3 = 3;
        //first iteration
        for (int i = 0; i < arr.length - dim1; i++) {
            for (int j = i + dim1; j < arr.length; j += dim1) {
                if (j < arr.length) if (arr[i] > arr[j]) {
                    int x = arr[i];
                    arr[i] = arr[j];
                    arr[j] = x;
                    swaps++;
                }
            }
        }
        //second iteration
        for (int i = 0; i < arr.length - dim2; i++) {
            for (int j = i + dim2; j < arr.length; j += dim2) {
                if (j < arr.length) if (arr[i] > arr[j]) {
                    int x = arr[i];
                    arr[i] = arr[j];
                    arr[j] = x;
                    swaps++;
                }
            }
        }
        //third iteration
        for (int i = 0; i < arr.length - dim3; i++) {
            for (int j = i + dim3; j < arr.length; j += dim3) {
                if (j < arr.length) if (arr[i] > arr[j]) {
                    int x = arr[i];
                    arr[i] = arr[j];
                    arr[j] = x;
                    swaps++;
                }
            }
        }
        //final iteration
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                if (arr[i] < arr[j]) {
                    int x = arr[i];
                    arr[i] = arr[j];
                    arr[j] = x;
                    swaps++;
                }
            }
        }
 
 
        System.out.println("Sorting by Shell Methods:");
        for (int anArr : arr) {
            System.out.print(anArr + " ");
        }
        System.out.println("\nSwaps by this methods: " + swaps);
    }
 
    public void hoareSort(int[] arr) {
        int swaps = 0;
        swaps = iterateHoare(arr, 0, arr.length-1);
 
        System.out.println("Sorting by Hoare Methods:");
        for (int anArr : arr) {
            System.out.print(anArr + " ");
        }
        System.out.println("\nSwaps by this methods: " + swaps);
    }
 
    //быстрая сортировка (метод Хоара)
    public int iterateHoare(int[] arr, int first, int last) {
        int swaps = 0;
        int i = first, j = last;
        int base = arr[(first + last + 1) / 2];
        while (i < j) {
            while (arr[i] < base) i++;
            while (arr[j] > base) j--;
            if (i <= j) {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
                i++;
                j--;
                swaps++;
            }
        }
        if (first < j)
            swaps += iterateHoare (arr, first, j);
        if (i < last)
            swaps += iterateHoare (arr, i, last);
        return swaps;
    }
    
 
 
}
В каждом методе Вам интересна переменная swaps, которая показывает количество перестановок
Ну и в главном классе что-то вроде
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        Sorter sorter = new Sorter();
        //создаете массивы нужной длины, заполняете значениями
        int[] array20;
        int[] array50;
        ...
 
        // теперь вызываете все методы класса для каждого массива и анализируете swaps
        //обратите внимание, каждый раз массив будет отсортирован, после каждой сортировки создаете его заново
        sorter.bubbleSort(array20);
        sorter.shellSort(array20);
        ...
        ...
        ...
        sorter.hoareSort(array1000);
Добавлено через 1 минуту
Прочитал внимательнее, очевидно, нужен только метод Шелла - sorter.shellSort();

Добавлено через 3 минуты
Ну и здесь рассказали, как рассчитывать время выполнения программы
1
0 / 0 / 0
Регистрация: 12.11.2015
Сообщений: 56
10.03.2016, 13:09  [ТС] 3
Спасибо большое за помощь

Добавлено через 22 часа 27 минут
вопрос, а если мне нужна сортировка с конца в начало и сортировка случайным образом, что нужно поменять здесь ??
0
Pablito
10.03.2016, 13:11
  #4

Не по теме:

Цитата Сообщение от JanCover Посмотреть сообщение
сортировка случайным образом
=-O

0
0 / 0 / 0
Регистрация: 12.11.2015
Сообщений: 56
10.03.2016, 15:27  [ТС] 5
Ну так в задании написано, я тоже не понял о чём это =/
0
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
10.03.2016, 15:55 6
Цитата Сообщение от JanCover Посмотреть сообщение
в задании написано
в задании написано:
Цитата Сообщение от JanCover Посмотреть сообщение
Исследовать влияние начальной упорядоченности массива (отсортированный,
отсортированный в обратном порядке, отсортирован случайным образом).
и речь идёт о начальном массиве: если он [начальный массив] упорядочен, упорядочен по-убыванию или не упорядочен (отсортирован - было бы умнее написать "заполнен") хаотически. Вам нужно отследить сколько времени займёт обработка этих исходных массивов и сделать выводы.
0
0 / 0 / 0
Регистрация: 12.11.2015
Сообщений: 56
10.03.2016, 16:00  [ТС] 7
аааа, дошло, спасибо =)
0
BRcr
10.03.2016, 22:22
  #8
 Комментарий модератора 

JanCover, не дублируйте темы, будьте так добры.
0
0 / 0 / 0
Регистрация: 12.11.2015
Сообщений: 56
14.03.2016, 11:16  [ТС] 9
А что нужно поменять в этом коде, что бы сортировка проходила с конца в начало ??
То есть наоборот =)
0
0 / 0 / 0
Регистрация: 12.11.2015
Сообщений: 56
15.03.2016, 11:44  [ТС] 10
Java
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
public class Sorter {
  
    //сортировка методом Шелла
    public void shellSort(int[] arr) {
        int swaps = 0;
        int dim1 = 9;
        int dim2 = 6;
        int dim3 = 3;
        //first iteration
        for (int i = 0; i < arr.length - dim1; i++) {
            for (int j = i + dim1; j < arr.length; j += dim1) {
                if (j < arr.length) if (arr[i] > arr[j]) {
                    int x = arr[i];
                    arr[i] = arr[j];
                    arr[j] = x;
                    swaps++;
                }
            }
        }
        //second iteration
        for (int i = 0; i < arr.length - dim2; i++) {
            for (int j = i + dim2; j < arr.length; j += dim2) {
                if (j < arr.length) if (arr[i] > arr[j]) {
                    int x = arr[i];
                    arr[i] = arr[j];
                    arr[j] = x;
                    swaps++;
                }
            }
        }
        //third iteration
        for (int i = 0; i < arr.length - dim3; i++) {
            for (int j = i + dim3; j < arr.length; j += dim3) {
                if (j < arr.length) if (arr[i] > arr[j]) {
                    int x = arr[i];
                    arr[i] = arr[j];
                    arr[j] = x;
                    swaps++;
                }
            }
        }
        //final iteration
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                if (arr[i] < arr[j]) {
                    int x = arr[i];
                    arr[i] = arr[j];
                    arr[j] = x;
                    swaps++;
                }
            }
        }
 
 
        System.out.println("Sorting by Shell Methods:");
        for (int anArr : arr) {
            System.out.print(anArr + " ");
        }
        System.out.println("\nSwaps by this methods: " + swaps);
    }
 
    public void hoareSort(int[] arr) {
        int swaps = 0;
        swaps = iterateHoare(arr, 0, arr.length-1);
 
        System.out.println("Sorting by Hoare Methods:");
        for (int anArr : arr) {
            System.out.print(anArr + " ");
        }
        System.out.println("\nSwaps by this methods: " + swaps);
    }
  
 
}
Как сделать эту сортировку в обратном порядке, что бы из сортировало не от меньшего к большему, а от большего к меньшему ?
0
143 / 115 / 61
Регистрация: 13.01.2016
Сообщений: 305
15.03.2016, 13:35 11
JanCover, хм, особо не вникая - в arr[i] < arr[j] значки больше на меньше везде заменить получится?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.03.2016, 13:35
Помогаю со студенческими работами здесь

Реализация метода внутренней сортировки в виде динамической библиотеки
Есть такое задание: 1. Создать и реализовать алгоритм построения массива данных, содержащего...

Разработка алгоритма и программ с использованием методов внутренней сортировки
Создайте массив А целых чисел с помощью генератора случайных чисел и выведите его на экран....

Разработка алгоритмов и программ с использованием методов внутренней сортировки
Составьте программу с использованием указанного метода сортировки. Необходимо сформировать...

Разработка алгоритма и программ с использованием методов внутренней сортировки
1. Создайте массив А вещественных чисел с помощью генератора случайных чисел и выведите его на...


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

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

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