Bu tür bir hızlı sıralamada üçü ortanca uygulamaya çalışıyorum. Bunun hızlı bir şekilde en iyi şekilde uygulanamayacağını biliyorum ama maalesef bununla çalışmak zorunda kalıyorum.Üçlü ortanca üçlüsünün genel bir fastsort'a uygulanması
public static <E extends Comparable<E>> void quickSort(E[] list){
quickSort(list, 0, list.length - 1);
}
private static <E extends Comparable<E>> void quickSort(E[] list, int first, int last){
if (last > first) {
int pivotIndex = partition(list, first, last);
quickSort(list, first, pivotIndex - 1);
quickSort(list, pivotIndex + 1, last);
}
}
private static <E extends Comparable<E>> int partition(E[] list, int first, int last){
E pivot = list[first];
int low = first + 1;
int high = last;
while (high > low) {
while (low <= high && (list[low].compareTo(pivot) <= 0)){
low++;
}
while (low <= high && (list[high].compareTo(pivot) > 0)){
high--;
}
if (high > low){
E temp = list[high];
list[high] = list[low];
list[low] = temp;
}
}
while (high > first && (list[high].compareTo(pivot) >= 0)){
high--;
}
if (pivot.compareTo(list[high]) > 0){
list[first] = list[high];
list[high] = pivot;
return high;
} else{
return first;
}
}
Ne ilk yaptığım Jenerik diziler ile çalışacak şekilde değiştirmek olduğunu. Şimdi medyanına list
dizisi dizisindeki pivotu ayarlamanız gerekiyor.
İlk üç değerin medyanını nasıl alacağımı anlıyorum. Anlamadığım şey, bu hızlı sıralama uygulamasının nasıl çalıştığını nasıl etkilediğidir.
Dönüşü medyan değere ayarladıktan sonra, bu ileri ve geri aramaları nasıl etkiler? Gösterilen kodda, low
, 1 tarafından artırılan "sol" öğeye ayarlanır. Özel durumumda pivot değerini 1 artırır mıyım? Birisi, uygulamaya çalıştığım medyanın üçünün arkasındaki mantığı açıklayabilir mi?
Evet, şemaları okuyordum ve düşük, orta ve yüksek bağlamda üçte bir arada kalabilirim. bir sebepten ötürü, dizinin ilk üç değerini kullanmam gerekiyor. – terbubbs
@terbubbs - aynı mantık, sadece ilk 3 değeri karşılaştırın/değiştirin, böylece orta değer dizide [düşük] biter. Önce bir alt dizide> = 3 değer olduğunu kontrol etmeniz gerekir. – rcgldr
Aynı mantığı başka bir yerde okuyorum, daha mantıklı. hasta bir deneyin ve size geri dönün, teşekkürler! – terbubbs