import console;

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

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)
	}
}


console.log("----------------")
console.log("合并排序( 基于分治法 )")
console.log("----------------")

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

//输出结果
for(i=1;#array;1){
	console.log( array[i] )
}
 
execute("pause")