Skip to content

Commit 486b52f

Browse files
Add C++ implementation
Signed-off-by: begeekmyfriend <begeekmyfriend@gmail.com>
1 parent 10dee49 commit 486b52f

File tree

1 file changed

+10
-17
lines changed

1 file changed

+10
-17
lines changed

215_kth_largest_element_in_an_array/kth_elem.c

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
11
#include <stdio.h>
22
#include <stdlib.h>
33

4-
static inline void swap(int *a, int *b)
5-
{
6-
int t = *a;
7-
*a = *b;
8-
*b = t;
9-
}
104

115
static int partition(int *nums, int lo, int hi)
126
{
@@ -15,19 +9,18 @@ static int partition(int *nums, int lo, int hi)
159
}
1610

1711
int i = lo;
18-
int j = hi - 1;
12+
int j = hi;
1913
int pivot = nums[hi];
20-
while (i <= j) {
21-
while (i <= j && nums[i] <= pivot) { i++; }
22-
while (i <= j && nums[j] > pivot) { j--; }
23-
if (i < j) {
24-
swap(nums + i, nums + j);
25-
}
14+
while (i < j) {
15+
while (i < j && nums[i] <= pivot) { i++; }
16+
/* Loop invariant: nums[i] > pivot or i == j */
17+
nums[j] = nums[i];
18+
while (i < j && nums[j] >= pivot) { j--; }
19+
/* Loop invariant: nums[j] > pivot or i == j */
20+
nums[i] = nums[j];
2621
}
27-
/* Loop invariant: j + 1 == i && nums[j] <= pivot && nums[i] > pivot
28-
* Besides, j could be -1 or i could be hi, so we swap [i] and [hi]
29-
*/
30-
swap(nums + i, nums + hi);
22+
/* Loop invariant: i == j */
23+
nums[i] = pivot;
3124
return i;
3225
}
3326

0 commit comments

Comments
 (0)