2016-04-26 2 views
2

Может ли кто-нибудь помочь мне разобраться в этом методе подкачки, который является частью более крупной программы быстрого сортировки? Предполагается, что он принимает массив и два целых числа и свопит указательные позиции, обозначенные целыми числами.Метод swap для quicksort в java

private static <T extends Comparable<T>> int partition(T[] table, int first, int last) { 
    T pivot = table[first]; 
    int up = first; 
    int down = last; 

    do { 
     while ((up < last) && (pivot.compareTo(table[up]) >= 0)) { 
      up++; 
     } 
     while (pivot.compareTo(table[down]) < 0) { 
      down--; 
     } 
     if (up < down) { 
      swap(table, up, down); 
     } 
    } 

    while (up < down); 
    swap(table, first, down); 
    return down; 
} 

Метод свопинга в настоящее время не определен, и я не уверен, как его заставить работать. Я пробовал написать метод:

void swap(T[] array, int a, int b) { 
    T temp = array[a]; 
    array[a] = array[b]; 
    array[b] = temp; 
} 

Однако я продолжаю получать ошибку, которую T не может решить для типа. Но когда я пытаюсь изменить тип на int, метод не работает там, где он вызывается выше.

ответ

3

Вам необходимо добавить общий тип <T> к вашему методу swap. Что-то наподобие

static <T> void swap(T[] array, int a, int b) { 
    T temp = array[a]; 
    array[a] = array[b]; 
    array[b] = temp; 
} 
+0

Я также пробовал это, а мои вызовы метода свопа все еще говорят, что «метод swap (T [], int, int) не определен для типа QuickSort« У меня есть метод, определенный на том же уровне, что и private static > int partition (T [] table, int first, int last) – Teej

+0

Никогда не работает, на самом деле получается, что я просто не скомпилировался через некоторое время. Спасибо большое – Teej

-1

Если вы используете quicksort для чего-либо помимо задания на домашнюю работу, не тратьте впустую свое время. Используйте команду Collections.sort().

+0

это домашнее задание lol – Teej