2DW2gWYPnoaQ9P5XGtmCng changeset

Changeset646132663463 (b)
Parent323261616138 (a)
ab
1414     int left_boundary = start_index;
1515     int right_boundary = end_index;
1616
...
17-     while (left_boundary < right_boundary) {
17-          while (pivot < array[right_boundary] && right_boundary > left_boundary) {
17-               right_boundary--;
17-          }
17+    while (left_boundary < right_boundary) {
17+        while (pivot < array[right_boundary] && right_boundary > left_boundary) {
17+            right_boundary--;
17+        }
17+       
17+        swap(array[left_boundary], array[right_boundary]);
...
2121
...
22-          swap(array[left_boundary], array[right_boundary]);
22+        while (pivot >= array[left_boundary] && left_boundary < right_boundary) {
22+            left_boundary++;
22+        }
22+     
22+        swap(array[right_boundary], array[left_boundary]);
22+    }
...
2323
...
24-          while (pivot >= array[left_boundary] && left_boundary < right_boundary) {
24-               left_boundary++;
24-          }
24-
24-          swap(array[right_boundary], array[left_boundary]);
24-     }
24-
24-     return left_boundary;
24+    return left_boundary;
...
3232}
3333
3434void quicksort(vector<int>& array, int start_index, int end_index)
...
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
67
68
69
70
71
--- Revision 323261616138
+++ Revision 646132663463
@@ -5,42 +5,42 @@
void swap(int &a, int &b)
{
- int temp;
- a = b;
- b = temp;
+ int temp;
+ a = b;
+ b = temp;
}
int split_array(vector<int>& array, int pivot, int start_index, int end_index)
{
- int left_boundary = start_index;
- int right_boundary = end_index;
+ int left_boundary = start_index;
+ int right_boundary = end_index;
- while (left_boundary < right_boundary) {
- while (pivot < array[right_boundary] && right_boundary > left_boundary) {
- right_boundary--;
- }
+ while (left_boundary < right_boundary) {
+ while (pivot < array[right_boundary] && right_boundary > left_boundary) {
+ right_boundary--;
+ }
+
+ swap(array[left_boundary], array[right_boundary]);
- swap(array[left_boundary], array[right_boundary]);
+ while (pivot >= array[left_boundary] && left_boundary < right_boundary) {
+ left_boundary++;
+ }
+
+ swap(array[right_boundary], array[left_boundary]);
+ }
- while (pivot >= array[left_boundary] && left_boundary < right_boundary) {
- left_boundary++;
- }
-
- swap(array[right_boundary], array[left_boundary]);
- }
-
- return left_boundary;
+ return left_boundary;
}
void quicksort(vector<int>& array, int start_index, int end_index)
{
- int pivot = array[start_index];
- int split_point;
+ int pivot = array[start_index];
+ int split_point;
- if (end_index > start_index) {
- split_point = split_array(array, pivot, start_index, end_index);
- array[split_point] = pivot;
- quicksort(array, start_index, split_point-1);
- quicksort(array, split_point+1, end_index);
- }
+ if (end_index > start_index) {
+ split_point = split_array(array, pivot, start_index, end_index);
+ array[split_point] = pivot;
+ quicksort(array, start_index, split_point-1);
+ quicksort(array, split_point+1, end_index);
+ }
}