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
#include<bits/stdc++.h>
using namespace std;
void qs(vector<int> &nums,int left,int right){
if(left>=right) return;

int pivot_index = (left+right)/2;
int pivot = nums[pivot_index];
int i = 0;
int j = right;
while(i<j){
//TODO
while(nums[i]<pivot){
//TODO
i++;
}
while(nums[j]>pivot){
//TODO
j--;
}
if(i<=j)
{
swap(nums[i],nums[j]);
i++;
j--;
}



}
qs(nums,left,j);
qs(nums,i,right);


}

void quick_sort(vector<int> &num,int left,int right){
if (left>= right) return ;
// partion
srand(time(nullptr));
int index = rand()%(right-left);
index += left;
int target_num = num[index];
int i = left;
int j = left;
int k = right;

while(i<k){
//TODO
if(num[i]>target_num){
swap(num[i],num[--k]);
}else if(num[i]<target_num){
swap(num[i++],num[j++]);
}else i++;

}

quick_sort(num,left,j);
quick_sort(num,k,right);

}

int main(){
int n;
cin>>n;
vector<int> nums;
for(int i = 0;i<n;i++){
int temp;
cin>>temp;
nums.push_back(temp);
}
qs(nums,0,nums.size()-1);
return 0;
}