Одно из заданий моего профессора для меня оказывается особенно сложным. Я должен написать метод со следующим заголовком:Рекурсивно сортировка массива строк без вспомогательного параметра
public static void sort(String[] a)
Метод должны сортировать массив в порядке возрастания (не уверен, если это означает, что «порядок возрастание длины строки», но это то, что я предполагаю) ,
Уловка: Мне не разрешено каким-либо образом изменять заголовок метода, мне не разрешено использовать сортировку или сортировку слиянием, и мне не разрешено использовать какие-либо посторонние пакеты/библиотеки.
Слияние сортировки и быстрая сортировка не разрешены для меня, поскольку я тоже не очень люблю, но мне трудно понять, как это сделать, не передавая вспомогательный параметр (для хранения позиция индекса для массива), которая будет использоваться в рекурсивных вызовах.
Это то, что я придумал после нескольких часов разочарования и в основном спиннинг мои колеса:
public static void sort(String[] a)
{
String temp;
// Note that we use a.length - 1 in the loop condition
// to account for the fact that we will be checking the value of the
// element at the current index against the value of the element at the NEXT index.
// Since array indices are zero-based, iterating from 0 to a.length would result
// in an ArrayIndexOutOfBoundsException when we index = 7, since the
// base case would check a[7] against a[8], the latter of which does not exist
for (int index = 0; index < a.length - 1; index++)
{
if (a[index].length() < a[index + 1].length())
{
continue;
}
else
{
temp = a[index + 1];
a[index + 1] = a[index];
a[index] = temp;
// Recursive call to the sort method
sort(a);
}
}
}
Основная идея состояла в том, чтобы проверить каждый элемент «несколько раз» с для петель таким образом, чтобы стимулировать каждый элемент попадает в свое «надлежащее место» (в смысле «возрастающего порядка»). Я сомневаюсь, что это правильно, хотя я не тестировал его (профессор еще не загрузил драйвер для этого задания).
Если нет, может кто-нибудь может указать мне в правильном направлении? Кажется, что не существует методов в классе Array или String, который был бы здесь полезен. Я даже не вижу возможности для рекурсии здесь; не было бы бесполезно, если бы я просто передавал метод один и тот же массив снова и снова?
Просто реализуйте сортировку пузырьков? –
Если назначение заключается в использовании рекурсии, возможно, вы можете разбить исходный массив в меньших массивах и передать их методу рекурсии, таким образом вам не понадобятся дополнительные параметры. Если задание не связано с рекурсией, следуйте совету Энди: реализуйте классический вид пузыря – BackSlash
, он должен быть рекурсивно? –