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

Сортировка Хоара

13.04.2014, 01:26. Показов 3633. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Требуется отсортировать список методом Хоара. Подскажите пожалуйста где можно прочесть про сортировку списка, а то везде написано про сортировку массива.
Заранее благодарен
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.04.2014, 01:26
Ответы с готовыми решениями:

Сортировка Хоара, неполадки с реализацией
Необходимо реализовать сортировку методом Хоара. Сделал но выдаёт ошибки. Помогите, пожалуйста,...

Быстрая сортировка (сортировка Хоара) для связных списков
есть у кого готовый алгоритм? или подскажите как реализовать

Быстрая сортировка(сортировка Хоара). Отсортировать фрагмент массива
Мне нужно отсортировать фрагмент массива, расположенный между первым и последним отрицательным...

Сортировка векторов методами: пузырька, Хоара, Шейкерная сортировка
Сортировка векторов методами: пузырька, Хоараб, Шейкерная сортировка Каждый отдельный алгоритм...

12
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
13.04.2014, 01:28 2
скажу по секрету, разницы то особой и нет, просто немного обращение по другому
0
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 16
13.04.2014, 01:33  [ТС] 3
Тогда если Вам не сложно можете разъяснить.
Вот метод для массива..
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static void hoar(int first,int last, int array[]) {
    int i,j,c,x;   
    i=first;
    j=last;
    x=array[5];
    do
    {
        while (array[i]>x)  i++;
        while (x>array[j])  j--;
        if (i<=j)
        {
            c=array[i];
            array[i]=array[j];
            array[j]=c;
            i++;
            j=i-1 ;
        }
    }
    while (i>j);
    if (first<j) hoar(first,j,array);
    if (i<last) hoar(i,last,array); 
    }
}
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
13.04.2014, 02:05 4
Лучший ответ Сообщение было отмечено kovalev28 как решение

Решение

если изменить ваш код, то тогда "как-то так"
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static void hoar(int first,int last, List<Integer> array) {
        int i,j,c,x;
        i=first;
        j=last;
        x=array.get(5);
        do
        {
            while (array.get(i)>x)  i++;
            while (x>array.get(j))  j--;
            if (i<=j)
            {
                c=array.get(i);
                array.set(i, array.get(j));
                array.set(j, c);
                i++;
                j=i-1 ;
            }
        }
        while (i>j);
        if (first<j) hoar(first,j,array);
        if (i<last) hoar(i,last,array);
    }
1
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 16
14.04.2014, 00:23  [ТС] 5
tankomaz,
возникла проблемка..
метод где то зацикливается..
Подскажите пожалуйста в каком месте может быть ошибка
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
14.04.2014, 00:26 6
а он уже до меня зацикливался
0
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 16
14.04.2014, 00:34  [ТС] 7
да это я понимаю =(
вот думаю что может там быть не так -_- (ненавижу разбираться не в моем коде кхм ладно)
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
14.04.2014, 00:53 8
Лучший ответ Сообщение было отмечено kovalev28 как решение

Решение

"подсмотрено" и переделано, оригинальный объект также привожу для сравнения

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
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
package com.tankomaz;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
 
public class Logarithm {
 
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1, 5, 3, 7, 2, 9, 0, 12, 343, 4, 3, 6, 1);
        System.out.println(list);
        hoaresort(list, 0, list.size() - 1);
        System.out.println(list);
 
        HoareSort hoareSort = new HoareSort();
    }
 
    private static void hoaresort(List<Integer> A, int p, int r)
    {
        int q;
        if (p < r)
        {
            q = hoare_partition(A, p, r);
            hoaresort(A, p, q - 1);
            hoaresort(A, q + 1, r);
        }
    }
 
    private static int hoare_partition(List<Integer> A, int p, int r)
    {
        int x = A.get(p);
        int i = p - 1;
        int j = r + 1 ;
 
        int exchange;
 
        while (true)
        {
            do
            {
                j--;
            }
            while (A.get(j) > x);
 
            do
            {
                i++;
            }
            while (A.get(i) < x);
 
            if (i < j)
            {
                exchange = A.get(i);
                A.set(i, A.get(j));
                A.set(j, exchange);
            }
            else
                return j;
        }
    }
}
 
 
class HoareSort
{
    public HoareSort()
    {
        System.out.println("Hoare Sort");
 
        System.out.println("Enter number of elements in the array");
        int array_elements = 2;
        try
        {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            array_elements = Integer.parseInt(reader.readLine());
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
 
        if (array_elements < 2)
        {
            System.out.println("Number of elements in the array should be greater or equal 2");
        }
        else
        {
            Random random = new Random();
 
            //int[] A = new int[]{13, 19, 9, 5, 12, 8, 7, 4, 11, 2, 6, 21};
            int[] A = new int[array_elements];
 
            for (int i = 0; i < A.length; i++)
                A[i] = random.nextInt(1000);
 
            System.out.println("Unsorted array");
            for (int i : A)
            {
                System.out.print(String.format("%5d", i));
            }
            System.out.println();
 
            hoaresort(A, 0, A.length - 1);
 
            System.out.println("Sorted array");
            for (int i : A)
            {
                System.out.print(String.format("%5d", i));
            }
            System.out.println();
        }
    }
 
    private void hoaresort(int[] A, int p, int r)
    {
        int q;
        if (p < r)
        {
            q = hoare_partition(A, p, r);
            hoaresort(A, p, q - 1);
            hoaresort(A, q + 1, r);
        }
    }
 
    private int hoare_partition(int[] A, int p, int r)
    {
        int x = A[p];
        int i = p - 1;
        int j = r + 1 ;
 
        int exchange;
 
        while (true)
        {
            do
            {
                j--;
            }
            while (A[j] > x);
 
            do
            {
                i++;
            }
            while (A[i] < x);
 
            if (i < j)
            {
                exchange = A[i];
                A[i] = A[j];
                A[j] = exchange;
            }
            else
                return j;
        }
    }
}
1
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 16
14.04.2014, 01:07  [ТС] 9
Спасибо большое!
0
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 16
16.04.2014, 00:03  [ТС] 10
А не подскажите как можно реализовать данный метод для списка с указателями?
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
16.04.2014, 00:05 11
в java нет указателей, это вроде бы из С++ раздела вопрос
0
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 16
16.04.2014, 00:26  [ТС] 12
связанные списки так вроде
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
16.04.2014, 00:28 13
данный код работает со всеми коллекциями, что реализовывали интерфейс List, если речь про связанные списки (aka LinkedList) то он тоже будет работать без переделок кода
0
16.04.2014, 00:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.04.2014, 00:28
Помогаю со студенческими работами здесь

Сортировка простым включением, сортировка Хоара. strawberry
Всем привет!Пришла на форум, т.к. не к кому больше обратиться!Сама не в силах решить, не понимаю...

C/C++ FAQ :: Быстрая сортировка (сортировка Хоара)
Вопрос, скорее академический, по мотивам реализации. Вот в faq приведена реализация этого метода...

Сортировка Хоара (быстрая сортировка) по убыванию
Помогите найти/написать/понять/отобразить как пишется код для данного задания или хотя бы часть...

Быстрая сортировка (сортировка методом Хоара)
Ввести массив x1,x2,...,x20 в диапазоне . Требуется расположить отрицательные элементы в порядке...

Сортировка Хоара
Uses crt; type mas=array of integer; const n=10; var m:mas; i:integer; procedure...

Сортировка Хоара с JS
Переписал с JS: function quickSort(arr, low, high) { var i = low; ...


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

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