-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathquick.cpp
43 lines (38 loc) · 855 Bytes
/
quick.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
#include "quick.h"
QuickSort::QuickSort(std::vector<int> v)
: Sort(v)
{
}
void QuickSort::sort()
{
sort_sub(0, elements.size()-1);
}
void QuickSort::sort_sub(int start, int end)
{
if ( start >= end )
return;
int piv_pos = end;
int pivot = elements[piv_pos];
int smaller = start;
int greater = end;
while(true) {
while( elements[smaller] <= pivot && smaller < end )
smaller++;
while( elements[greater] > pivot && greater > start )
greater--;
if ( greater > smaller ) {
if ( elements[greater] < elements[smaller] ) {
swap(elements[greater], elements[smaller]);
} else {
smaller++;
greater--;
}
} else {
if ( elements[greater] > elements[piv_pos] )
swap(elements[greater], elements[piv_pos]);
break;
}
}
sort_sub(start, smaller-1);
sort_sub(greater+1, end);
}