forked from doocs/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMain.cpp
80 lines (62 loc) · 1.12 KB
/
Main.cpp
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
72
73
74
75
76
77
#include <iostream>
#include <vector>
using namespace std;
void printvec( const vector<int> &vec, const string &strbegin = "", const string &strend = "" )
{
cout << strbegin << endl;
for ( auto val : vec )
{
cout << val << "\t";
}
cout << endl;
cout << strend << endl;
}
int partition( vector<int> & vec, int left, int right )
{
if ( left >= right )
{
return left;
}
int base = vec[left];
while ( left < right )
{
while ( left < right && vec[right] >= base )
{
right--;
}
if ( left >= right )
{
break;
}
vec[left] = vec[right];
while ( left < right && vec[left] <= base )
{
left++;
}
if ( left >= right )
{
break;
}
vec[right] = vec[left];
}
vec[left] = base;
return left;
}
void quicksort( vector<int> & vec, int left, int right )
{
if ( left >= right )
{
return;
}
int idx = partition( vec, left, right );
quicksort( vec, left, idx - 1 );
quicksort( vec, idx + 1, right );
}
int main( void )
{
vector<int> vec = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
printvec( vec );
quicksort( vec, 0, vec.size() - 1 );
printvec( vec, "after insert sort" );
return 0;
}