Skip to content

Commit 31de1a2

Browse files
authored
Update sort-even-and-odd-indices-independently.cpp
1 parent f549fb9 commit 31de1a2

File tree

1 file changed

+9
-12
lines changed

1 file changed

+9
-12
lines changed

C++/sort-even-and-odd-indices-independently.cpp

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,10 @@ class Solution {
77
vector<int> sortEvenOdd(vector<int>& nums) {
88
const auto& partition = [](const auto& index, vector<int> *nums) {
99
for (int i = 0; i < size(*nums); ++i) {
10-
int j = index(i);
11-
while ((*nums)[i] > 0) {
12-
swap((*nums)[i], (*nums)[j]);
13-
(*nums)[j] = ~(*nums)[j]; // visited
10+
int j = i;
11+
while ((*nums)[i] >= 0) {
1412
j = index(j);
13+
tie((*nums)[i], (*nums)[j]) = pair((*nums)[j], ~(*nums)[i]);
1514
}
1615
}
1716
for (auto& x : (*nums)) {
@@ -46,12 +45,11 @@ class Solution {
4645
if ((*nums)[i] < 0) { // processed
4746
continue;
4847
}
49-
while (i != left + count[(*nums)[i]] - 1) {
48+
while ((*nums)[i] >= 0) {
5049
--count[(*nums)[i]];
51-
tie((*nums)[left + count[(*nums)[i]]], (*nums)[i]) = pair(~(*nums)[i], (*nums)[left + count[(*nums)[i]]]);
50+
const int j = left + count[(*nums)[i]];
51+
tie((*nums)[i], (*nums)[j]) = pair((*nums)[j], ~(*nums)[i]);
5252
}
53-
--count[(*nums)[i]];
54-
(*nums)[i] = ~(*nums)[i];
5553
}
5654
for (int i = left; i <= right; ++i) {
5755
(*nums)[i] = ~(*nums)[i]; // restore values
@@ -70,11 +68,10 @@ class Solution2 {
7068
vector<int> sortEvenOdd(vector<int>& nums) {
7169
const auto& partition = [](const auto& index, vector<int> *nums) {
7270
for (int i = 0; i < size(*nums); ++i) {
73-
int j = index(i);
74-
while ((*nums)[i] > 0) {
75-
swap((*nums)[i], (*nums)[j]);
76-
(*nums)[j] = ~(*nums)[j]; // processed
71+
int j = i;
72+
while ((*nums)[i] >= 0) {
7773
j = index(j);
74+
tie((*nums)[i], (*nums)[j]) = pair((*nums)[j], ~(*nums)[i]);
7875
}
7976
}
8077
for (auto& x : (*nums)) {

0 commit comments

Comments
 (0)