io.open();//打开控制台

/*
 *-------------------------------------------------------
 * 合并排序 
 **------------------------------------------------------
 */

merge = function(array,from,mid,to){ 

	var left = { table.unpack(array,from,mid) }
	var right = { table.unpack(array,mid+1,to) };
	 
	var i = 1;
	var j = 1;
	
	for(k=from;to){　
		//比较left,right最前面的一个数，从中取最小的一个
		if( (!right[j]) or left[i] <= right[j] ){ 
			//如果right空，则!right[j]为真，就直接取left 
			array[k] = left[i];
			i++;
		}
		else { 
			//如果L空，则left[i]为null，null不会小于等于任何数，left[i] <= right[j]必然为不成立
			array[k] = right[j];
		    j++;
		}  
	}
	 
}

merge_sort = function(array,from,to) {

	if( from < to ){
		var mid =math.floor( ( from + to ) / 2) 
		merge_sort(array,from,mid);
		merge_sort(array,mid+1,to);
		merge(array,from,mid,to)
	}
}


io.print("----------------")
io.print("合并排序( 基于分治法 )")
io.print("----------------")

array ={2;4;5;7;1;2;3};
merge_sort(array,1,#array)

//输出结果
for(i=1;#array;1){
	io.print( array[i] )
}
 

execute("pause") //按任意键继续
io.close();//关闭控制台

