@dan1sh
Trainee/Junior Java developer

Почему не работает быстрая сортировка на Java?

Здравствуйте Господа! Возникли сложности при реализации алгоритма быстрой сортировки таким образом, чтобы опорным элементом в процедуре Partition всегда выбирался последний элемент текущего массива. Алгоритм и мой код приведен ниже
41a7fde7e4634c9e97b7bfab25c240e9.JPG
public static int[] quickSort(int arr[], int p, int r){
        if(p < 2){
            int q = partition(arr, p, r);
            quickSort(arr, p, q-1);
            quickSort(arr, q+1, r);
        }
        return arr;
    }

private static int partition(int[] arr, int p, int r) {
        int x = arr[r];
        int i = p-1;
        for (int j = p; j < r; j++){
            if(arr[j] < x){
                count++;
                i++;
                int temp = arr[j];
                arr[j] = arr[i];
                arr[i] = temp;
            }
            System.out.println(count);
            System.out.println(Arrays.toString(arr));
        }
        int t = arr[r];
        arr[r] = arr[i+1];
        arr[i+1] = t;

        return i+1;
    }

Подозреваю что ошибка кроется в строке
int x = arr[r];
Помогите, пожалуйста, разобраться где же кроется подвох.
  • Вопрос задан
  • 229 просмотров
Решения вопроса 1
@dan1sh Автор вопроса
Trainee/Junior Java developer
Господа! Разрешилось! Свап делал неправильно. Рабочий код ниже
int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;

int t = arr[i+1];
        arr[i+1] = arr[r];
        arr[r] = t;


public static int[] quickSort(int arr[], int p, int r){
        if(p < r){
            int q = partition(arr, p, r);
            quickSort(arr, p, q-1);
            quickSort(arr, q+1, r);
        }
        return arr;
    }

    private static int partition(int[] arr, int p, int r) {
        int x = arr[r];
        int i = p-1;
        for (int j = p; j < r; ++j){
            count++;
            if(arr[j] < x){

                i++;
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
            System.out.println(Arrays.toString(arr));
        }
        int t = arr[i+1];
        arr[i+1] = arr[r];
        arr[r] = t;
        return i+1;
    }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы