-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathIterativeQuickSort.java
More file actions
66 lines (52 loc) · 1.57 KB
/
IterativeQuickSort.java
File metadata and controls
66 lines (52 loc) · 1.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// http://www.geeksforgeeks.org/iterative-quick-sort/
/*
Problem with recursive Quick Sort -
The function remains recursive and uses function call stack to store intermediate values of l and h. The function call stack stores other bookkeeping information together with parameters. Also, function calls involve overheads like storing activation record of the caller function and then resuming execution.
Recursive Quick Sort can be easily converted to iterative version with the help of an auxiliary stack. Following is an iterative implementation of the recursive code.
*/
class IterativeQuickSort {
static int partition(int[] arr, int low, int high) {
int pivot = arr[high];
int i = low - 1;
for(int j = low; j < high; j++) {
if(arr[j] <= pivot) {
i++;
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int temp = arr[i+1];
arr[i+1] = arr[high];
arr[high] = temp;
return i+1;
}
static void iterativeQuickSort(int[] arr, int low, int high) {
int[] stack = new int[high - low + 1];
int top = -1;
stack[++top] = low;
stack[++top] = high;
while(top >= 0) {
high = stack[top--];
low = stack[top--];
int pi = partition(arr, low, high);
if(pi-1 > low) {
stack[++top] = low;
stack[++top] = pi - 1;
}
if(pi + 1 < high) {
stack[++top] = pi + 1;
stack[++top] = high;
}
}
}
public static void main(String[] args) {
int[] arr = new int[] {3, 1, 4, 2};
int N = arr.length;
iterativeQuickSort(arr, 0, N-1);
for(int i = 0; i < N; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}