-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathShuffleSongs.java
126 lines (107 loc) · 3.05 KB
/
ShuffleSongs.java
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package algorithms;
import java.util.LinkedList;
import java.util.List;
/**
* Shuffles songs in a play list.
*
* @author joeytawadrous
*/
public class ShuffleSongs
{
static List<Song> songsList;
@SuppressWarnings("unchecked")
public static void main(String[] args)
{
initSongsList();
System.out.println("Before Shuffle");
printSongsList(songsList);
System.out.println("After Shuffle 1");
printSongsList(shuffle1(songsList));
initSongsList();
System.out.println("After Shuffle 2");
printSongsList(shuffle2(songsList));
}
private static void initSongsList()
{
songsList = new LinkedList<Song>();
songsList.add(new Song("Moon Light", "Nature", "AL"));
songsList.add(new Song("Go Next", "Future", "J. J"));
songsList.add(new Song("Fear", "Hell G.", "SD"));
songsList.add(new Song("My name is", "Future", "Khan"));
songsList.add(new Song("My Lord", "K", "Ali"));
}
/**
* Prints lit of songs.
* @param list
*/
private static void printSongsList(List<Song> list)
{
for (int i = 0; i < list.size(); i++)
{
Song song = list.get(i);
System.out.printf("# %d - Title: %13s | Album: %10s | Artist: %10s\n", i+1, song.title, song.album, song.artist);
}
System.out.println("-------------------------------------------------------------------");
}
/**
* Shuffles a play list. O(n)
* @param list
* @return resultList
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
private static List shuffle1(List list)
{
List resultList = new LinkedList();
int size = list.size();
int rand = 0;
Object[] temp = list.toArray();
int count = 0;
while(count != size)
{
rand = (int)(Math.random()*list.size());
if(!resultList.contains(temp[rand]))
{
resultList.add(temp[rand]);
count++;
}
}
return resultList;
}
/**
* Shuffles a play list using recursion. O(log n)
* @param list
* @return resultList
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
private static List shuffle2(List list)
{
if(list.size() == 1)
{
return list;
}
else
{
int rand = (int)(Math.random()*list.size());
Object song = list.remove(rand);
list = shuffle2(list);
list.add(song);
return list;
}
}
/**
* Inner class.
* @author joeytawadrous
*/
private static class Song
{
private String title;
private String album;
private String artist;
public Song(String title, String album, String artist)
{
this.title = title;
this.album = album;
this.artist = artist;
}
}
}