| 
					
				 | 
			
			
				@@ -0,0 +1,57 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package main 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"fmt" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"math/rand" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"time" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+type ints []int 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func (is ints) merge(aux []int, lo, mid, hi int) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for i, j, k := lo, mid+1, lo; k <= hi; k++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if mid < i { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			aux[k] = is[j] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			j++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} else if hi < j { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			aux[k] = is[i] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			i++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} else if is[i] < is[j] { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			aux[k] = is[i] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			i++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			aux[k] = is[j] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			j++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	copy(is[lo:hi+1], aux[lo:hi+1]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func (is ints) msort(aux []int, lo, hi int) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if hi <= lo { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	mid := lo + (hi-lo)/2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	is.msort(aux, lo, mid) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	is.msort(aux, mid+1, hi) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	is.merge(aux, lo, mid, hi) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func (is ints) sort() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	l := len(is) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	aux := make([]int, l) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	is.msort(aux, 0, l-1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func main() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var n int 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	fmt.Scan(&n) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var list ints = make([]int, n) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	rand.Seed(time.Now().Unix()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for i := range list { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		list[i] = rand.Intn(2 * n) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	fmt.Println(list) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	list.sort() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	fmt.Println(list) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |