比如给一个整数序列[5,5,3,3,9,9,4,4,0,0,6,6,8,8,2,2,7,7,1,1],只需要把序列中的每个元素在中间数组标识一下,如5可以标识为arrTemp[5]=1,如果序列中还有这个元素可以标识为arrTemp[5]=2,如此arrTemp=[2,2,2,2,2,2,2,2,2,2],再把arrTemp翻译为结果[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9],这样做时间复杂度为2*len,具体代码如下(未做输入参数检查):
var
SF
=
{
Sort : function (arr){
var arrTemp = []
var index = - 1
for ( var i = 0 ; i < arr.length; i ++ ){
var item = arr[i]
//if(arrTemp[item] == 1){
if (arrTemp[item] >= 1 ){
arrTemp[item] ++
} else {
arrTemp[item] = 1
}
}
var arrR = []
for ( var i = 0 ; i < arrTemp.length; i ++ ){
var item = arrTemp[i]
if (item){
for ( var j = 0 ; j < item; j ++ ){
arrR.push(i)
}
}
}
return arrR
}
}
var arr = [ 5,5,3,3,9,9,4,4,0,0,6,6,8,8,2,2,7,7,1,1 ]
alert(SF.Sort(arr))
Sort : function (arr){
var arrTemp = []
var index = - 1
for ( var i = 0 ; i < arr.length; i ++ ){
var item = arr[i]
//if(arrTemp[item] == 1){
if (arrTemp[item] >= 1 ){
arrTemp[item] ++
} else {
arrTemp[item] = 1
}
}
var arrR = []
for ( var i = 0 ; i < arrTemp.length; i ++ ){
var item = arrTemp[i]
if (item){
for ( var j = 0 ; j < item; j ++ ){
arrR.push(i)
}
}
}
return arrR
}
}
var arr = [ 5,5,3,3,9,9,4,4,0,0,6,6,8,8,2,2,7,7,1,1 ]
alert(SF.Sort(arr))