package sorting;

public class SortingFour {
	
	// assume that the array a only contains four elements:
	// a[0], a[1], a[2], and a[3]
	
	private static class MyVector<AnyType> extends java.util.Vector<AnyType> {
		MyVector<AnyType> put(AnyType x) {
			add(x); return this;
		}
	}
	
	public static <AnyType extends Comparable<? super AnyType>>
	void sortFour( AnyType [] in) {
		AnyType a = in[0], b = in[1], c = in[2], d = in[3];
		MyVector<AnyType> v = new MyVector<AnyType>();
		v = 
			(a.compareTo(b) < 0) ? 
					( (c.compareTo(d) < 0) ?
							( (a.compareTo(c) < 0) ?
									
											( (b.compareTo(c) < 0) ?
													v.put(a).put(b).put(c).put(d)
													:
														( (b.compareTo(d) < 0) ?
																v.put(a).put(c).put(b).put(d)
																:
																	v.put(a).put(c).put(d).put(b)
														)
											)
											:
									        ( (b.compareTo(d) < 0) ?
												v.put(c).put(a).put(b).put(d)
													:
														( (a.compareTo(d) < 0) ?
																v.put(c).put(a).put(d).put(b)
																:
																v.put(c).put(d).put(a).put(b)
													    )
											)
											)
								  
						       :
							   ( (a.compareTo(d) < 0) ?
										( (b.compareTo(d) < 0) ?
												v.put(a).put(b).put(d).put(c)
												:
													( (b.compareTo(c) < 0) ?
															v.put(a).put(d).put(b).put(c)
															:
															v.put(a).put(d).put(c).put(b)
												    )
										)
						                :
									    ( (c.compareTo(a) < 0) ?
												v.put(d).put(c).put(a).put(b)
												:
													( (b.compareTo(c) < 0) ?
															v.put(d).put(a).put(b).put(c)
															:
															v.put(d).put(a).put(c).put(b)
													    )
											)
								)							      
					)
					:
						( (c.compareTo(d) < 0) ?
								( (b.compareTo(c) < 0) ?
										
												( (a.compareTo(c) < 0) ?
														v.put(b).put(a).put(c).put(d)
														:
															( (a.compareTo(d) < 0) ?
																	v.put(b).put(c).put(a).put(d)
																	:
																		v.put(b).put(c).put(d).put(a)
															)
												)
												:
										        ( (d.compareTo(b) < 0) ?
													v.put(c).put(d).put(b).put(a)
														:
															( (a.compareTo(d) < 0) ?
																	v.put(c).put(b).put(a).put(d)
																	:
																	v.put(c).put(b).put(d).put(a)
														    )
												)
												)
									  
							       :
								   ( (b.compareTo(d) < 0) ?
											( (a.compareTo(d) < 0) ?
													v.put(b).put(a).put(d).put(c)
													:
														( (a.compareTo(c) < 0) ?
																v.put(b).put(d).put(a).put(c)
																:
																v.put(b).put(d).put(c).put(a)
													    )
											)
							                :
										    ( (c.compareTo(b) < 0) ?
													v.put(d).put(c).put(b).put(a)
													:
														( (a.compareTo(c) < 0) ?
																v.put(d).put(b).put(a).put(c)
																:
																v.put(d).put(b).put(c).put(a)
														    )
												)
									)							      
						)
				;
				

				   	
						 					
	    in[0] = v.elementAt(0); in[1] = v.elementAt(1); in[2] = v.elementAt(2); in[3] = v.elementAt(3);
		return;
	}
	
}
