Skip to content

Commit f9c4e1b

Browse files
committed
Added radixSort.cpp
1 parent 967c690 commit f9c4e1b

File tree

4 files changed

+140
-13
lines changed

4 files changed

+140
-13
lines changed
+42-8
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,29 @@
11
#include<iostream>
2-
#include<algorithm>
32
#include<vector>
3+
#include<functional>
44

55
using namespace std;
66

77
#define ll long long
88

9-
vector<ll> counting_sort(vector<ll> v, ll k)
9+
vector<ll> counting_sort(vector<ll> v, function<ll(ll)> key = [](ll x){return x;},ll k=-1)
1010
{
1111
vector<ll> w;
1212
w.reserve(v.size());
1313

14-
vector<int> table(k+10, 0);
14+
if(k==-1){
15+
for(auto i : v)
16+
if(k<i)k=i;
17+
}
18+
19+
vector<vector<ll>> table(k+10); //vector<type_of_unsorted_vector>
1520

1621
for(auto i : v)
17-
table[i]++;
22+
table[key(i)].push_back(i);
1823

1924
for(ll i=0; i<=k+5; i++)
20-
if(table[i])
21-
while(table[i]--)
22-
w.push_back(i);
25+
for(auto j : table[i])
26+
w.push_back(j);
2327

2428
return w;
2529
}
@@ -30,8 +34,12 @@ int main()
3034

3135
for(auto i : v)
3236
cout<<i<<" ";
37+
38+
//user defined key for descending order
39+
function<ll(ll)> key;
40+
key = [](ll x) {return 11-x;};
3341

34-
v=counting_sort(v, 11);
42+
v=counting_sort(v, key);
3543

3644
cout<<"\n Sorted:\n";
3745
for(auto i : v)
@@ -40,3 +48,29 @@ int main()
4048

4149
return 0;
4250
}
51+
52+
53+
/*
54+
vector<ll> counting_sort(vector<ll> v, ll k)
55+
{
56+
vector<ll> w;
57+
w.reserve(v.size());
58+
59+
if(k==-1){
60+
for(auto i : v)
61+
if(k<i)k=i;
62+
}
63+
64+
vector<int> table(k+10, 0);
65+
66+
for(auto i : v)
67+
table[i]++;
68+
69+
for(ll i=0; i<=k+5; i++)
70+
if(table[i])
71+
while(table[i]--)
72+
w.push_back(i);
73+
74+
return w;
75+
}
76+
*/

sortingAlgo/countingSort/countingSort.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
#TC
22
arr = [10, 7, 8, 1, 4, 2, 5]
33

4-
def countingSort(arr, k, key=(lambda x:x)):
4+
def countingSort(arr, key=(lambda x:x), k=-1):
5+
if k==-1:
6+
k=max(arr)
7+
58
table = [[] for _ in range(k+3)]
69

710
for n in arr:

sortingAlgo/radixSort/radixSort.cpp

+83
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
#include<iostream>
2+
#include<vector>
3+
#include<functional>
4+
5+
using namespace std;
6+
7+
#define ll long long
8+
9+
ll power(ll x, ll y)//fast integer exponentiation
10+
{
11+
ll ans=1;
12+
while(y)
13+
{
14+
if(y&1)
15+
ans*=x;
16+
y/=2;
17+
x*=x;
18+
}
19+
20+
return ans;
21+
}
22+
23+
vector<ll> counting_sort(vector<ll> v, function<ll(ll)> key = [](ll x){return x;}, ll k=-1)
24+
{
25+
vector<ll> w;
26+
w.reserve(v.size());
27+
28+
if(k==-1){
29+
for(auto i : v)
30+
if(k<i)k=i;
31+
}
32+
33+
vector<vector<ll>> table(k+10); //vector<type_of_unsorted_vector>
34+
35+
for(auto i : v)
36+
table[key(i)].push_back(i);
37+
38+
for(ll i=0; i<=k+5; i++)
39+
for(auto j : table[i])
40+
w.push_back(j);
41+
42+
return w;
43+
}
44+
45+
vector<ll> radix_sort(vector<ll> v, ll k=-1)
46+
{
47+
if(k==-1){
48+
for(auto i : v)
49+
if(k<i)k=i;
50+
}
51+
52+
ll b=v.size(); //base for radixsort is size of array
53+
54+
// MSB 'd' in maximum element 'k' in base b
55+
ll d=0, temp=k;
56+
while(temp/=b)
57+
d++;
58+
59+
for(int i=0;i<=d;i++){
60+
function<ll(ll)> key;
61+
key = [i,b](ll x){return ((x/power(b,i))%b);};
62+
v=counting_sort(v, key, k);
63+
}
64+
65+
return v;
66+
}
67+
68+
int main()
69+
{
70+
vector<ll> v = {10, 9, 4, 5, 7};
71+
72+
for(auto i : v)
73+
cout<<i<<" ";
74+
75+
v=radix_sort(v);
76+
77+
cout<<"\n Sorted:\n";
78+
for(auto i : v)
79+
cout<<i<<" ";
80+
cout<<endl;
81+
82+
return 0;
83+
}

sortingAlgo/radixSort/radixSort.py

+11-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
#TC
22
arr = [10, 7, 8, 1, 4, 2, 5]
33

4-
def countingSort(arr, k, key=(lambda x:x)):
4+
def countingSort(arr, k=-1, key=(lambda x:x)):
5+
if k==-1:
6+
k = max(arr)
7+
58
table = [[] for _ in range(k+3)]
69

710
for n in arr:
@@ -12,9 +15,12 @@ def countingSort(arr, k, key=(lambda x:x)):
1215
arr.extend(i)
1316
return arr
1417

15-
def radixSort(arr, k):
18+
def radixSort(arr, k=-1):
1619
b = len(arr) # base for radix sort
17-
20+
21+
if k==-1:
22+
k = max(arr)
23+
1824
#calculate number of digits in k when in base b
1925
d = 0
2026
copy = k
@@ -27,4 +33,5 @@ def radixSort(arr, k):
2733

2834
return arr
2935

30-
print(radixSort(arr, 15))
36+
37+
print(radixSort(arr))

0 commit comments

Comments
 (0)