sonunda pivot ile iki bölüm ayrıldığında, bölümleme yöntemimin çalıştığını düşünüyorum, ancak kthSmallest yöntemini nasıl anlayacağımı veya anlayamıyorum. Artık bölümleme yöntemimle sınır hatalarından kurtulmayacağım, ki bu bana çalışmanın ve çalışmanın test edildiği gibi olduğunu düşünmeme yol açıyor. Ancak, kthSmallest yöntemim genellikle sonsuz bir döngüde sıkışır ve bir değer döndürdüğünde, hiçbir zaman doğru değer değildir.kthSmallest yöntemi, tamsayıların bir dizisi/alt dizisi
İki alt aralık arasında pivot yerleştiren çevrimiçi örnekleri gördüm ancak ödevimiz için pivot her zaman en sonunda sonunda bu örneklere bakarken kafam karışıyor. Bu Yapmaya çalıştığınız ne gibi görünüyor
class Median{
static int kthSmallest(int[] arr, int left, int right, int k){
int divider = partition(arr, left, right);
if(divider == k-1){
return arr[right];
}
else if(divider > k-1){
return kthSmallest(arr, left, divider-1, k);
}
else{
return kthSmallest(arr, divider, right, (k - divider-1));
}
}
static int partition(int[] arr, int left, int right){
int pivot = arr[right];
int index = left;
for(int i = left; i < right-1; i++){
if(arr[i] < pivot){
swap(arr, index, i);
index++;
}
}
printArr(arr);
System.out.println("divider: " + index);
return index;
}
static void swap(int[] arr, int i, int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
static void printArr(int[] arr){
System.out.println();
for(int index = 0; index < arr.length - 1; index++){
System.out.print(arr[index] + ", ");
}
System.out.print(arr[arr.length-1]);
System.out.println();
}
public static void main(String[] args){
int[] arr = {34,-1,0,5,3};
printArr(arr);
//System.out.println(partition(arr, 0, arr.length-1));
//printArr(arr);
System.out.println(kthSmallest(arr, 0, arr.length - 1, 2));
}
}
haline gelmelidir. Sonunda çalıştım ve iki alt dizinin ortasına pivot koyarak söylediklerinizi yaptım. Söylediğiniz diğer iki şeyi de düzelttim (çünkü kesinlikle sıkışmış/gerçekten şaşırmıştım). Teşekkürler teşekkürler. – hjskeqwe
Çalıştığımız işe memnun oldum. Bu cevabı kabul etmeyi düşünür müsün? Benzer bir sorunu yaşayan kullanıcılara yardım edebilir ve sorunuzun fark edilmesine yardımcı olur. Daha fazla bilgisi için, [FAQ] 'a (http://stackoverflow.com/help/accepted-answer) bakın. Teşekkürler ve hoşgeldiniz! – Wesley