Skip to content

Commit 90db60b

Browse files
committed
Quick sort algo implemented
1 parent b279e24 commit 90db60b

2 files changed

Lines changed: 111 additions & 0 deletions

File tree

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
//Bottom-up mergesort: Java implementation
2+
public class MergeBU
3+
{
4+
private static void merge(Comparable[] a, Comparable[] aux, int lo, int mid, int hi)
5+
{
6+
assert isSorted(a, lo, mid);
7+
// precondition: a[lo..mid] sorted
8+
assert isSorted(a, mid+1, hi); // precondition: a[mid+1..hi] sorted
9+
for (int k = lo; k <= hi; k++)
10+
aux[k] = a[k];
11+
int i = lo, j = mid+1;
12+
for (int k = lo; k <= hi; k++)
13+
{
14+
if (i > mid) a[k]=aux[j++];
15+
else if (j > hi) a[k]=aux[i++];
16+
else if (less(aux[j], aux[i])) a[k]=aux[j++];
17+
else a[k]=aux[i++];
18+
}
19+
assert isSorted(a, lo, hi);
20+
21+
}
22+
private static boolean isSorted(Comparable[] a, int lo, int hi) {
23+
for (int i = lo + 1; i <= hi; i++)
24+
if (less(a[i], a[i-1])) return false;
25+
return true;
26+
}
27+
private static boolean less(Comparable v, Comparable w)
28+
{
29+
return (v.compareTo(w) < 0);
30+
}
31+
//private static void sort(Comparable[] a, Comparable[] aux, int lo, int hi)
32+
//{
33+
//if (hi <= lo) return;// improve this by using insertion sort
34+
//int mid = lo + (hi - lo) / 2;
35+
//sort(a, aux, lo, mid);
36+
//sort(a, aux, mid+1, hi);
37+
////another improvement
38+
//// if (!less(a[mid+1], a[mid])) return;
39+
//merge(a, aux, lo, mid, hi);
40+
//}
41+
public static void sort(Comparable[] a)
42+
{
43+
int N = a.length;
44+
Comparable[] aux = new Comparable[N];
45+
for (int sz = 1; sz < N; sz = sz+sz)
46+
for (int lo = 0; lo < N-sz; lo += sz+sz)
47+
merge(a, aux, lo, lo+sz-1, Math.min(lo+sz+sz-1, N-1));
48+
}
49+
//Client
50+
public static void main(String[] args){
51+
// int[] a={4,2,5,2,65,1,6,3,7,2};
52+
String[] a={"cat","abh","viki","shy","rom"};
53+
for(int p=0;p<5;p++)
54+
System.out.print(a[p]+",");
55+
System.out.println("");
56+
sort(a);
57+
for(int p=0;p<5;p++)
58+
System.out.print(a[p]+",");
59+
}
60+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
//Quick Sort implementation
2+
public class Quick
3+
{
4+
private static int partition(Comparable[] a, int lo, int hi)
5+
{
6+
int i = lo, j = hi+1;
7+
while (true)
8+
{
9+
while (less(a[++i], a[lo]))
10+
if (i == hi) break;
11+
while (less(a[lo], a[--j]))
12+
if (j == lo) break;
13+
if (i >= j) break;
14+
exch(a, i, j);
15+
}
16+
exch(a, lo, j);
17+
return j;
18+
}
19+
private static boolean less(Comparable v, Comparable w)
20+
{
21+
return (v.compareTo(w) < 0);
22+
}
23+
private static void exch(Comparable[] a, int i, int j)
24+
{
25+
Comparable swap = a[i];
26+
a[i] = a[j];
27+
a[j] = swap;
28+
}
29+
public static void sort(Comparable[] a)
30+
{
31+
StdRandom.shuffle(a);//shuffle needed for performance guarantee
32+
sort(a, 0, a.length - 1);
33+
}
34+
private static void sort(Comparable[] a, int lo, int hi)
35+
{
36+
if (hi <= lo) return;
37+
int j = partition(a, lo, hi);
38+
sort(a, lo, j-1);
39+
sort(a, j+1, hi);
40+
}
41+
public static void main(String[] args){
42+
// int[] a={4,2,5,2,65,1,6,3,7,2};
43+
String[] a={"cat","abh","viki","shy","rom"};
44+
for(int p=0;p<5;p++)
45+
System.out.print(a[p]+",");
46+
System.out.println("");
47+
sort(a);
48+
for(int p=0;p<5;p++)
49+
System.out.print(a[p]+",");
50+
}
51+
}

0 commit comments

Comments
 (0)