Skip to content

Commit 8928f1a

Browse files
authored
Added 3 way quick sort
1 parent 050178a commit 8928f1a

File tree

1 file changed

+93
-0
lines changed

1 file changed

+93
-0
lines changed

3_way_quick_sort.cpp

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
#include<bits/stdc++.h>
2+
using namespace std;
3+
4+
void print(long long arr[],long long n)
5+
{
6+
for(int i=0;i<n;i++)
7+
cout<<arr[i]<<" ";
8+
}
9+
10+
pair<long long,long long> partition3(long long arr[],long long l,long long r )
11+
{
12+
pair <long long,long long> par;
13+
long long i=l,j,k=l,p=r;
14+
while(i<p)
15+
{
16+
if(arr[i]<arr[r])
17+
swap(arr[i++],arr[k++]);
18+
else if(arr[i]==arr[r])
19+
swap(arr[i],arr[--p]);
20+
else
21+
i++;
22+
}
23+
// print(arr,r+1);
24+
// cout<<endl;
25+
// cout<<k<<" "<<p<<endl;
26+
long long temp=arr[r],end;
27+
for(i=p-1,j=r;i>=k;i--,j--)
28+
arr[j]=arr[i];
29+
end=j;
30+
for(j;j>=k;j--)
31+
arr[j]=temp;
32+
// print(arr,r+1);
33+
// cout<<endl<<end;
34+
par=make_pair(k,end);
35+
return par;
36+
}
37+
38+
void sort(long long arr[],long long l,long long r)
39+
{
40+
if(l<r)
41+
{
42+
int k=l+rand()%(r-l+1);
43+
swap(arr[l],arr[k]);
44+
pair<long long,long long> par=partition3(arr,l,r);
45+
sort(arr,l,par.first-1);
46+
sort(arr,par.second+1,r);
47+
}
48+
}
49+
bool checkSorted(long long arr[],long long n)
50+
{
51+
int i;
52+
for(i=0;i<n-1;i++)
53+
if(arr[i]>arr[i+1])
54+
return false;
55+
return true;
56+
}
57+
58+
int main()
59+
{
60+
long long n,arr[100010];
61+
cin>>n;
62+
for(int i=0;i<n;i++)
63+
cin>>arr[i];
64+
sort(arr,0,n-1);
65+
print(arr,n);
66+
// partition3(arr,0,n-1);
67+
return 0;
68+
}
69+
70+
// int main()
71+
// {
72+
// long long n,ini[1000],temp,arr[1000],i;
73+
// n=100;
74+
// while(1)
75+
// {
76+
// srand(time(0));
77+
// for(i=0;i<n;i++)
78+
// {
79+
// temp=rand()%4;
80+
// arr[i]=temp;
81+
// ini[i]=temp;
82+
// }
83+
// sort(arr,0,n-1);
84+
// if(checkSorted(arr,n)==false)
85+
// {
86+
// print(ini,n);
87+
// cout<<endl;
88+
// print(arr,n);
89+
// return 0;
90+
// }
91+
// }
92+
// return 0;
93+
// }

0 commit comments

Comments
 (0)