Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 26

Быстрая сортировка

31.03.2018, 17:36. Показов 864. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Реализовать быструю сортировку в Android studio.
Написал код, но после нажатия кнопки он просто выводит массив. Что я не так сделал?

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
public class MainActivity extends AppCompatActivity{
 
    EditText fieldInput;
    TextView fieldOutput;
    Button button_Run;
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        final Button buttonRun = findViewById(R.id.button_Run);
        final EditText fieldInput = (EditText) findViewById(R.id.fieldInput);
        final TextView fieldOutput = (TextView) findViewById(R.id.fieldOutput);
 
        buttonRun.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                fieldOutput.setText("");
 
                String fieldInput2 = fieldInput.getText().toString(); // приводим к типу String
                String[] mas = fieldInput2.split(" ");
 
                int numMas[] = new int[mas.length]; //преобразование в массив
 
                for (int i = 0; i < mas.length; i++) { //преобразуем в массив
                    numMas[i] = Integer.parseInt(mas[i]);
                }
 
                int low = numMas[0];
                int high= numMas[numMas.length-1];
 
                quickSort(numMas,low, high);
 
                for (int i = 0; i < numMas.length; i++) {
                    String sorted = String.valueOf(numMas[i]);
                    fieldOutput.append(numMas[i]+" ");
                }
            }
        });    }
 
    //Сортировка
    public int quickSort(int numMas[], int low, int high) {
        if (low >= high)
            return 0;//завершить выполнение если уже нечего делить
 
        // выбрать опорный элемент
        int middle = low + (high - low) / 2;
        int opora = numMas[middle];
 
        // разделить на подмассивы, который больше и меньше опорного элемента
        int i = low, j = high;
        while (i <= j) {
            while (numMas[i] < opora) {
                i++;
            }
            while (numMas[j] > opora) {
                j--;
            }
            if (i <= j) {//меняем местами
                int temp = numMas[i];
                numMas[i] = numMas[j];
                numMas[j] = temp;
                i++;
                j--;
            }
        }
        // вызов рекурсии для сортировки левой и правой части
        if (low < j)
            quickSort(numMas, low, j);
 
        if (high > i)
            quickSort(numMas, i, high);
 
        return middle;
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.03.2018, 17:36
Ответы с готовыми решениями:

Быстрая сортировка и сортировка Шелла
есть трудности с быстрой сортировкой и сортировкой Шелла также нужен их сравнительный анализ

Быстрая сортировка
Доброй ночи! )) разбираюсь в java. написал алгоритм быстрой сортировки, и не могу понять в чем ошибка... вроде не первый день...

Быстрая сортировка
Помогите Пожалуйста написать метод, который будет сортировать массив в порядке возрастания из 50000 элементов за минимально возможный...

8
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
31.03.2018, 17:55
Попробуй использовать вот такой метод quickSort:

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
import java.util.Arrays;
 
public class Task016 {
    public static void main(String[] args) {
        int[] array = {3, 2, 4, 7, 4, 7, 9, 2, 5, 6 , 7};
        array = new Task016().quickSort(array, 0, array.length - 1);
        System.out.println(Arrays.toString(array));
    }
 
    private int[] quickSort(int[] array, int start, int end) {
        if (start < end) {
            int i = start;
            int j = end;
            int cursor = i - (i - j) / 2;
            while (i < j) {
                while (i < cursor && array[i] <= array[cursor]) {
                    i++;
                }
                while (j > cursor && array[cursor] <= array[j]) {
                    j--;
                }
                if (i < j) {
                    int temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                    if (i == cursor) {
                        cursor = j;
                    } else if (j == cursor) {
                        cursor = i;
                    }
                }
            }
            array = quickSort(array, start, cursor);
            array = quickSort(array, cursor + 1, end);
        }
        return array;
    }
}
Output:
Java
1
2
3
[2, 2, 3, 4, 4, 5, 6, 7, 7, 7, 9]
 
Process finished with exit code 0
1
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 26
31.03.2018, 18:10  [ТС]
Мне кажется что у меня ошибка в этой части
Java
1
2
3
4
5
6
                quickSort(numMas,start, end);
 
                for (int i = 0; i < numMas.length; i++) {
                    String sorted = String.valueOf(numMas[i]);
                    fieldOutput.append(numMas[i]+" ");
                }
Потому что, при использовании нового метода ничего не изменилось.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
31.03.2018, 18:22
Java
1
2
3
4
5
StringBuilder sorted = new StringBuilder();
for (int i = 0; i < numMas.length; i++) {
      sorted.append(String.valueOf(numMas[i]) + " ");
}
fieldOutput.setText(sorted.toString());
1
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 26
31.03.2018, 18:27  [ТС]
Все, Все!!!!!! Заработало!!!!

Добавлено через 2 минуты
Цитата Сообщение от ArtemFM Посмотреть сообщение
array = new Task016().quickSort(array, 0, array.length - 1);
Объясните пожалуйста, почему этот вызов неверный "quickSort(numMas, start, end)", а при вашем все работает нормально?
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
31.03.2018, 18:35
потому что при вызове цикла рекурсии нужно передавать либо i либо j, в зависимости от условия. А у тебя всегда i

Добавлено через 2 минуты
Ты можешь мой так же вызвать
quickSort(array, 0, array.length - 1);
массив всё равно отсортируется

Добавлено через 1 минуту
У тебя ошибка не в том, как ты вызываешь метод, а в том, что у тебя где-то ошибка в самом методе!!

Добавлено через 1 минуту
где-то тут:
Java
1
2
3
4
5
if (low < j)
            quickSort(numMas, low, j);
 
if (high > i)
            quickSort(numMas, i, high);
ошибка в входных данных для рекурсии
1
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 26
31.03.2018, 18:38  [ТС]
Спасибо!
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
31.03.2018, 18:45
Кстати, твой метод рабочий. Он так же сортирует массив нормально.
Видимо проблема была не в самом методе сортировки, а в том что ты не
вызывал метод edit.setText()
0
 Аватар для Aviz__
2741 / 2050 / 507
Регистрация: 17.02.2014
Сообщений: 9,470
02.04.2018, 12:12
KrotZaDroT, если бы включил дебагер, то сам все понял бы...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.04.2018, 12:12
Помогаю со студенческими работами здесь

Быстрая сортировка
Помогите,пожалуйста,исправить ошибки. Уже вторые сутки сижу над кодом и не могу понять в чем я ошибаюсь. Логика вроде правильная, но вот не...

Быстрая сортировка
Добрый вечер. Все тщетно пытаюсь написать быструю сортировку. Читал на википедии и т.д., но все же не могу прояснить несколько моментов. ...

Быстрая сортировка
Применяю к массиву быструю сортировку, но почему-то массив сортируется только после опорного элемента. Вызываю сортировку в кнопке....

Быстрая сортировка ArrayList
Помогите реализовать быструю сортировка ArrayList содержащего объекты import java.io.BufferedReader; import java.io.FileInputStream;...

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru