File tree Expand file tree Collapse file tree 1 file changed +23
-23
lines changed Expand file tree Collapse file tree 1 file changed +23
-23
lines changed Original file line number Diff line number Diff line change 1
1
#include <stdio.h>
2
2
#include <stdlib.h>
3
3
4
+ static inline void swap (int * a , int * b )
5
+ {
6
+ int tmp = * a ;
7
+ * a = * b ;
8
+ * b = tmp ;
9
+ }
10
+
4
11
static void reverse (int * a , int size )
5
12
{
6
- int left = 0 ;
7
- int right = size - 1 ;
8
- while (left < right ) {
9
- int tmp = a [left ];
10
- a [left ] = a [right ];
11
- a [right ] = tmp ;
12
- left ++ ;
13
- right -- ;
13
+ int lo = 0 ;
14
+ int hi = size - 1 ;
15
+ while (lo < hi ) {
16
+ swap (a + lo , a + hi );
17
+ lo ++ ;
18
+ hi -- ;
14
19
}
15
20
}
16
21
@@ -20,24 +25,19 @@ static void nextPermutation(int* nums, int numsSize)
20
25
return ;
21
26
}
22
27
23
- int * p = nums + numsSize - 1 ;
24
- int * q = nums + numsSize - 1 ;
25
-
26
- while (p != nums && * (p - 1 ) >= * p ) {
27
- p -- ;
28
+ int i = numsSize - 2 ;
29
+ while (i >= 0 && nums [i ] >= nums [i + 1 ]) {
30
+ i -- ;
28
31
}
29
32
30
- if (p != nums ) {
31
- int n = * ( p - 1 ) ;
32
- while (* q <= n ) {
33
- q -- ;
33
+ if (i >= 0 ) {
34
+ int j = numsSize - 1 ;
35
+ while (j >= 0 && nums [ j ] <= nums [ i ] ) {
36
+ j -- ;
34
37
}
35
-
36
- int tmp = * q ;
37
- * q = * (p - 1 );
38
- * (p - 1 ) = tmp ;
38
+ swap (nums + i , nums + j );
39
39
}
40
- reverse (p , numsSize - ( p - nums ) );
40
+ reverse (nums + i + 1 , numsSize - i - 1 );
41
41
}
42
42
43
43
int main (int argc , char * * argv )
@@ -56,7 +56,7 @@ int main(int argc, char **argv)
56
56
nextPermutation (nums , argc - 1 );
57
57
58
58
for (i = 0 ; i < argc - 1 ; i ++ ) {
59
- printf ("%d" , nums [i ]);
59
+ printf ("%d " , nums [i ]);
60
60
}
61
61
putchar ('\n' );
62
62
You can’t perform that action at this time.
0 commit comments