Всегда ли эта реализация быстрой сортировки правильно выбирает последний элемент массива в качестве опорного?
public class lab3q3 {
public static void main(String args[]) {
int[] array = {8, 2, 5, 3, 9, 4, 7, 6, 1};
quickSort(array, 0, array.length - 1);
for (int i : array) {
System.out.print(i + " ");
}
}
private static void quickSort(int[] array, int start, int end) {
if (end <= start) return; // Base case
int pivotIndex = partition(array, start, end);
quickSort(array, start, pivotIndex - 1);
quickSort(array, pivotIndex + 1, end);
}
private static int partition(int[] array, int start, int end) {
int pivotValue = array[end]; // Choose the last element as the pivot
int i = start - 1;
for (int j = start; j <= end; j++) {
if (array[j] <= pivotValue) {
i++;
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
return i;
}
}
2 ответа
Да, код правильный в соответствии с реализацией алгоритма быстрой сортировки и также выбирает последний элемент в качестве опорного.
Однако это может повлиять на эффективность вашего алгоритма в тех случаях, когда входной массив уже отсортирован или почти отсортирован, стремясь к сложности O(n²). Учитывайте это при выборе опорного элемента, будь то первый элемент массива, средний элемент или случайный элемент.
Добавить случайный
public static void main(String args[]) {
int[] array = {8, 2, 5, 3, 9, 4, 7, 6, 1,9};
quickSort(array, 0, array.length - 1);
for (int i : array) {
System.out.print(i + " ");
}
}
private static void quickSort(int[] array, int start, int end) {
if (end <= start) return; // Base case
int pivotIndex = partition(array, start, end);
quickSort(array, start, pivotIndex - 1);
quickSort(array, pivotIndex + 1, end);
}
private static int partition(int[] array, int start, int end) {
int random = start+((int) ((end-start) * Math.random()));
int cur =array[random];
array[random] = array[end];
array[end] = cur;
int pivotValue = array[end]; // Choose the last element as the pivot
int i = start - 1;
for (int j = start; j <= end; j++) {
if (array[j] <= pivotValue) {
i++;
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
return i;
}
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.