मैं अभी जावा में स्कूल सीख रहा हूं और हमारे नवीनतम विषय जावा में सॉर्ट एल्गोरिदम हैं। जिसे मैं समझने की कोशिश कर रहा हूं वह क्विकॉर्ट है।जावा क्विक्सोर्ट क्यों मूल्य/कहां बदलते हैं?
यह समझने के लिए कि एल्गोरिदम एक सरणी में संख्याओं को कैसे प्रकार करता है, मैंने ग्रहण डीबगर विंडो में चरण के लिए अपने कोड चरण से गुज़रने का फैसला किया।
अब एक कदम था जिसे मैं सैकड़ों बार महसूस करने के बाद भी समझ नहीं पाया।
मेरे प्रारंभिक सरणी [10, 5, 3, 22, 11, 2]
जब मैं 10
और 2
, तो 5
और 3
और फिर 2
और 2
स्वैप करके कोड कार्यक्रम शुरू होता माध्यम से जाना है। उस बिंदु पर i
का मान 1
है और j
का मान -1
है।
अब जिस तरह से मैं इसे देख तीन शर्तों
while(i<=j)
कौन साfalse
रिटर्न देखते हैं कि है, क्योंकिi = 1
औरj = -1
if(left < j)
कौन साfalse
देता है, क्योंकिleft = 0
औरj = -1
if(i < right)
जो भीfalse
देता है, क्योंकिi = 1
औरright = 1
लेकिन मेरे आश्चर्य करने के लिए जब कार्यक्रम right
के लिए 40 if(i < right)
लेकिन अचानक मूल्यों लाइन पिछले ब्रैकेट सही public static void display
से पहले कार्यक्रम वापस छोड़ देता है करने के लिए हो जाता है, i
, j
और pivot
5
, 2
, -1
, और 3
से क्रमशः बदल गया है।
मैं बहुत आभारी हूं अगर कोई समझा सकता है कि मूल्य क्यों बदलते हैं।
मैं भी जो दिखाती हैं, जो मैं अपने ग्रहण खिड़की पर 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);
}
}
धन्यवाद एक बहुत देखते हैं दो तस्वीरें जोड़ लिया है!
हो सकता है कि आप एक चुपके @ [त्वरित अनुक्रम का जावा कार्यान्वयन] (http://codereview.stackexchange.com/questions/4022/java-implementation-of-quick-sort) – Abhijeet