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


/*
 *-------------------------------------------------------
 * 计数排序
 **------------------------------------------------------
 */
 
/*
 假设n个0到k之间的整数。
 对于每一个输入元素x，确定出小于x的元素个数lt，则x可直接放于输出位置lt+1上。

*/
 

//计数排序算法
counting_sort = function( array ,k){
	array_sorted ={};
	
	count ={};
	for(i=0;k ){
	  count[i] = 0;
	}
	  
	for(i=1;#array;1){
		count[ array[i] ] = count[ array[i] ] + 1; //count[n] 包含等于n的个数
		 
	}
	 
	//统计位置
	for(i=1;k;1){
		count[i] += count[i-1]; //count[i] 包含小于等于i的个数 
	}
	 
	var n;
	for(i=#array;1;-1){
		n = array[i]
		array_sorted[ count[n] ] = n;
		count[n]--;//防止相同的元素n再次出现，将计数减一 
	}
	 
	return array_sorted; 
	 
}


io.print("----------------")
io.print("计数排序( 线性时间排序 )")
io.print("----------------")

array ={12;3;22;7;6;23;26};

//取出最大的数
var max = math.max( table.unpack(array) ) ;

//排序
array = counting_sort(array,max  )

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

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

