Skip to content

Commit c77cd8b

Browse files
committed
Radix sort and Counting sort added
1 parent 8e21b8b commit c77cd8b

File tree

8 files changed

+346
-0
lines changed

8 files changed

+346
-0
lines changed

Graph Generated/Radix_sort_graph.png

24.6 KB
Loading
25.2 KB
Loading
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
import java.io.BufferedWriter;
2+
import java.io.File;
3+
import java.io.FileWriter;
4+
import java.io.IOException;
5+
import java.util.Arrays;
6+
import java.util.List;
7+
import java.util.Random;
8+
9+
public class CountingSort {
10+
11+
public static void main(String[] args) throws IOException {
12+
13+
File f=new File("D:\\Algorithm time Complexity analysis\\counting_sort_analysis.txt");
14+
BufferedWriter bw=new BufferedWriter(new FileWriter(f,false),2);
15+
16+
//1000000, 3000000, 5000000, 7000000, 9000000
17+
List<Integer> TestCase=Arrays.asList(1000000, 3000000, 5000000, 7000000, 9000000);
18+
int[] best;
19+
int[] worst;
20+
int[] avg;
21+
22+
23+
int k=0;
24+
bw.write(" \tNumber_of_Input\tTime_Taken\n");
25+
26+
while(k < TestCase.size()) {
27+
28+
int arrSize=TestCase.get(k);
29+
best=new int[arrSize];
30+
worst=new int[arrSize];
31+
avg=new int[arrSize];
32+
33+
Random rand=new Random(); // To Generate Random Numbers...
34+
35+
for(int i=0;i<arrSize;i++) {
36+
avg[i]=rand.nextInt(1001); //Filling Numbers in the range of (0, ........, 1000) in array of size arrSize
37+
}
38+
39+
for(int i=0;i<arrSize;i++) {
40+
best[i]=avg[i];
41+
}
42+
Arrays.sort(best); // To make a sorted array... which we will use for best case..
43+
44+
for(int i=0;i<arrSize;i++) {
45+
worst[i]=best[arrSize-1-i]; // To make reverse order of the Best case ... to Check worst case..
46+
}
47+
48+
// For Best Case
49+
long initialTime=System.nanoTime();
50+
51+
best=counting_sort(best,arrSize);
52+
53+
long TimeTaken=System.nanoTime()-initialTime;
54+
bw.write(String.format("Best_Case\t%d\t%d\n",arrSize,TimeTaken));
55+
56+
// For Worst case
57+
initialTime=System.nanoTime();
58+
59+
worst=counting_sort(worst,arrSize);
60+
61+
TimeTaken=System.nanoTime()-initialTime;
62+
bw.write(String.format("Worst_Case\t%d\t%d\n",arrSize,TimeTaken));
63+
64+
// For Average case
65+
initialTime=System.nanoTime();
66+
67+
avg=counting_sort(avg,arrSize);
68+
69+
TimeTaken=System.nanoTime()-initialTime;
70+
bw.write(String.format("Avg_Case\t%d\t%d\n",arrSize,TimeTaken));
71+
72+
73+
// //For TESTING only...
74+
//
75+
// if(k==0) {
76+
// for(int i=0;i<arrSize;i++) {
77+
// System.out.print(best[i] +" ");
78+
// }
79+
// System.out.println();
80+
//
81+
// for(int i=0;i<arrSize;i++) {
82+
// System.out.print(worst[i] +" ");
83+
// }
84+
// System.out.println();
85+
//
86+
// for(int i=0;i<arrSize;i++) {
87+
// System.out.print(avg[i] +" ");
88+
// }
89+
// System.out.println();
90+
// }
91+
92+
93+
k++;
94+
System.out.println("Success");
95+
}
96+
bw.close();
97+
98+
}
99+
100+
private static int[] counting_sort(int[] arr, int n) {
101+
int max=Integer.MIN_VALUE;
102+
for(int i=0;i<n;i++) {
103+
if(arr[i] > max) {
104+
max=arr[i];
105+
}
106+
}
107+
108+
int[] count=new int[max+1];
109+
Arrays.fill(count,0);
110+
111+
for(int i=0;i<n;i++) {
112+
count[arr[i]]++;
113+
}
114+
115+
116+
for(int i=1;i<count.length;i++) {
117+
count[i]=count[i]+count[i-1];
118+
}
119+
120+
121+
int[] res=new int[n];
122+
123+
for(int i=n-1;i>=0;i--) {
124+
res[count[arr[i]]-1]=arr[i];
125+
count[arr[i]]--;
126+
}
127+
128+
return res;
129+
}
130+
131+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
import java.io.BufferedWriter;
2+
import java.io.File;
3+
import java.io.FileWriter;
4+
import java.io.IOException;
5+
import java.util.Arrays;
6+
import java.util.List;
7+
import java.util.Random;
8+
9+
public class RadixSort {
10+
11+
public static void main(String[] args) throws IOException {
12+
13+
File f=new File("D:\\Algorithm time Complexity analysis\\Radix_sort_analysis.txt");
14+
BufferedWriter bw=new BufferedWriter(new FileWriter(f,false),2);
15+
16+
//1000000, 3000000, 5000000, 7000000, 9000000
17+
List<Integer> TestCase=Arrays.asList(1000000, 3000000, 5000000, 7000000, 9000000);
18+
String[] best;
19+
String[] worst;
20+
String[] avg;
21+
22+
23+
int k=0;
24+
bw.write(" \tNumber_of_Input\tTime_Taken\n");
25+
26+
while(k < TestCase.size()) {
27+
28+
int arrSize=TestCase.get(k);
29+
best=new String[arrSize];
30+
worst=new String[arrSize];
31+
avg=new String[arrSize];
32+
33+
Random rand=new Random(); // To Generate Random Numbers...
34+
35+
char[] chars = "abcdefghijklmnopqrstuvwxyz".toCharArray();
36+
37+
for(int i=0;i<arrSize;i++) {
38+
StringBuilder sb = new StringBuilder(20);
39+
40+
for (int j = 0; j < 20; j++) {
41+
char c = chars[rand.nextInt(chars.length)];
42+
sb.append(c);
43+
}
44+
String output = sb.toString();
45+
avg[i]=output; //Filling Numbers in the range of (0, arrSize*10-1) in array of size arrSize
46+
}
47+
48+
for(int i=0;i<arrSize;i++) {
49+
best[i]=avg[i];
50+
}
51+
Arrays.sort(best); // To make a sorted array... which we will use for best case..
52+
53+
for(int i=0;i<arrSize;i++) {
54+
worst[i]=best[arrSize-1-i]; // To make reverse order of the Best case ... to Check worst case..
55+
}
56+
57+
// For Best Case
58+
long initialTime=System.nanoTime();
59+
60+
radix_sort(best,arrSize);
61+
62+
long TimeTaken=System.nanoTime()-initialTime;
63+
bw.write(String.format("Best_Case\t%d\t%d\n",arrSize,TimeTaken));
64+
65+
// For Worst case
66+
initialTime=System.nanoTime();
67+
68+
radix_sort(worst,arrSize);
69+
70+
TimeTaken=System.nanoTime()-initialTime;
71+
bw.write(String.format("Worst_Case\t%d\t%d\n",arrSize,TimeTaken));
72+
73+
// For Average case
74+
initialTime=System.nanoTime();
75+
76+
radix_sort(avg,arrSize);
77+
78+
TimeTaken=System.nanoTime()-initialTime;
79+
bw.write(String.format("Avg_Case\t%d\t%d\n",arrSize,TimeTaken));
80+
81+
82+
// //For TESTING only...
83+
//
84+
// if(k==0) {
85+
// for(int i=0;i<arrSize;i++) {
86+
// System.out.print(best[i] +" ");
87+
// }
88+
// System.out.println();
89+
//
90+
// for(int i=0;i<arrSize;i++) {
91+
// System.out.print(worst[i] +" ");
92+
// }
93+
// System.out.println();
94+
//
95+
// for(int i=0;i<arrSize;i++) {
96+
// System.out.print(avg[i] +" ");
97+
// }
98+
// System.out.println();
99+
// }
100+
101+
102+
k++;
103+
System.out.println("Success");
104+
}
105+
bw.close();
106+
107+
}
108+
109+
private static void radix_sort(String[] arr, int n) {
110+
int maxLen=getMaxLen(arr);
111+
112+
for(int pos=maxLen;pos >= 1;pos--) {
113+
countingSort(arr,pos);
114+
}
115+
}
116+
117+
private static void countingSort(String[] arr, int pos) {
118+
String[] res=new String[arr.length];
119+
int n=arr.length;
120+
int[] count=new int[26];
121+
122+
for(int i=0;i<n;i++) {
123+
count[(int)(arr[i].charAt(pos-1)-97)]++;
124+
}
125+
126+
for(int i=1;i<26;i++) {
127+
count[i]=count[i]+count[i-1];
128+
}
129+
130+
for(int i=n-1;i>=0;i--) {
131+
res[--count[(int)(arr[i].charAt(pos-1)-97)]]=arr[i];
132+
}
133+
134+
for(int i=0;i<n;i++) {
135+
arr[i]=res[i];
136+
}
137+
}
138+
139+
private static int getMaxLen(String[] arr) {
140+
int max=0;
141+
for(int i=0;i<arr.length;i++) {
142+
if(arr[i].length() > max) {
143+
max=arr[i].length();
144+
}
145+
}
146+
return max;
147+
}
148+
149+
}
Binary file not shown.

Radix_sort_analysis.txt

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
Number_of_Input Time_Taken
2+
Best_Case 1000000 6406659100
3+
Worst_Case 1000000 6393065600
4+
Avg_Case 1000000 6248059800
5+
Best_Case 3000000 20929324700
6+
Worst_Case 3000000 22229601300
7+
Avg_Case 3000000 19738977900
8+
Best_Case 5000000 39374702100
9+
Worst_Case 5000000 40133539700
10+
Avg_Case 5000000 33864697800
11+
Best_Case 7000000 49636840700
12+
Worst_Case 7000000 65490484600
13+
Avg_Case 7000000 64207640600
14+
Best_Case 9000000 96139520100
15+
Worst_Case 9000000 93144523300
16+
Avg_Case 9000000 75944498100

counting_sort_analysis.txt

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
Number_of_Input Time_Taken
2+
Best_Case 1000000 59165600
3+
Worst_Case 1000000 34989900
4+
Avg_Case 1000000 34440000
5+
Best_Case 3000000 22746400
6+
Worst_Case 3000000 23562700
7+
Avg_Case 3000000 23073800
8+
Best_Case 5000000 45049800
9+
Worst_Case 5000000 35919100
10+
Avg_Case 5000000 36444000
11+
Best_Case 7000000 69387200
12+
Worst_Case 7000000 61992000
13+
Avg_Case 7000000 50716400
14+
Best_Case 9000000 81472600
15+
Worst_Case 9000000 93557800
16+
Avg_Case 9000000 72944800
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# -*- coding: utf-8 -*-
2+
"""
3+
Created on Mon Sep 21 22:26:10 2020
4+
5+
@author: RS
6+
"""
7+
8+
9+
import pandas as pd
10+
import matplotlib.pyplot as mp
11+
12+
df=pd.read_csv("D:\Algorithm time Complexity analysis\\Radix_sort_analysis.txt",sep="\t")
13+
14+
best=[]
15+
worst=[]
16+
avg=[]
17+
18+
for i in range(df.shape[0]):
19+
if i%3==0:
20+
best.append([df.iloc[i,1],df.iloc[i,2]])
21+
if i%3==1:
22+
worst.append([df.iloc[i,1],df.iloc[i,2]])
23+
if i%3==2:
24+
avg.append([df.iloc[i,1],df.iloc[i,2]])
25+
26+
27+
mp.plot([i[0] for i in best],[i[1] for i in best],'bs--',label="bestcase(sorted)")
28+
mp.plot([i[0] for i in worst],[i[1] for i in worst],'m^--',label="worst case(reverse)")
29+
mp.plot([i[0] for i in avg],[i[1] for i in avg],'go--',label="averagecase(random)")
30+
mp.xlabel("Number of Input")
31+
mp.ylabel("Time Taken")
32+
mp.title("Radix Sort")
33+
mp.legend()
34+
mp.grid(True,color='k')

0 commit comments

Comments
 (0)