Şu anda okulda Java öğreniyorum ve en son konu Java'daki sıralama algoritmalarıdır. Anlamaya çalıştığım şey hızlı bağlantı.Java Quicksort neden/nerede değerler değişiyor?
Bu algoritmanın bir dizide sayıları nasıl sıraladığını anlamak için, Eclipse hata ayıklayıcı penceresinde adım adım kodumdan devam etmeye karar verdim.
Şimdi, yüzlerce kez hissettiklerimden geçtikten sonra bile kavrayamadığım bir adım vardı. Ben 10
ve 2
ardından 5
ve 3
ve sonra 2
ve 2
değiştirerek program başlamadan koduyla gittiğinizde
Benim ilk dizi [10, 5, 3, 22, 11, 2]
olduğunu. Bu noktada i
değeri 1
ve j
değeri -1
'dur.
false
döndürür
while(i<=j)
olmasıdıri = 1
vefalse
döndürürif(left < j)
j = -1
, çünküleft = 0
çünküj = -1
if(i < right)
Ayrıca hangi Program ama aniden değerlerini satır programın geri atlar sağpublic static void display
önceki son dilimine aldığındai = 1
çünküright = 1
Ama benim için sürpriz, i
, false
j
ve pivot
döndürür sırasıyla 5
, 2
, -1
ve 3
olarak değiştirilmiştir.
çok çok değerli olabilir, birisi değerlerin neden değiştiğini açıklayabilirse.
Ben de benim Eclipse penceresinde step I don't understand
public class QSort {
public static void quickSort(int[] arr, int left, int right){
int i = left;
int j = right;
int temp;
int pivot = arr[(left+right)/2];
System.out.println("\n\nleft = " + left + "\tright = " + right);
System.out.println("Pivot is: " + pivot + "(" + (left+right)/2 + ")");
while(i <= j){
while(arr[i] < pivot){
System.out.println("i is: " + arr[i] + "(" + i + ")");
i++;
System.out.println("i is: " + arr[i] + "(" + i + ")");
}
while(arr[j] > pivot){
System.out.println("j is: "+ arr[j] + "(" + j + ")");
j--;
System.out.println("j is: "+ arr[j] + "(" + j + ")");
}
if(i <= j){
System.out.println("i is: " + arr[i] + "(" + i + ")");
System.out.println("j is: "+ arr[j] + "(" + j + ")");
System.out.println("Swapped " + arr[i] + "(" + i + ")"+ " with " + arr[j] + "(" + j + ")");
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
System.out.println("i is: (" + i + ")");
System.out.println("j is: (" + j + ")");
System.out.println("Pivot is: " + pivot + "(" + (left+right)/2 + ")");
}
}
if(left < j){
System.out.println("j is: (" + j + ")");
quickSort(arr, left, j);
}
if(i < right){
System.out.println("i is: (" + i + ")");
quickSort(arr, i, right);
}
}
public static void display(int[] arr){
if(arr.length > 0){
System.out.print(arr[0]);
}
for(int i = 1; i < arr.length; i++){
System.out.print(", " + arr[i]);
}
}
public static void main(String[] args) {
int[] data = new int[]{10,5,3,22,11,2};
System.out.println("Before: ");
display(data);
quickSort(data, 0, data.length-1);
System.out.println("\nAfter: ");
display(data);
}
}
Çok teşekkürler gördükleri göstermek iki resim eklemiş!
Sneek @ [Hızlı Sıralama Java Uygulaması] (http://codereview.stackexchange.com/questions/4022/java-implementation-of-quick-sort) – Abhijeet