//计数排序 计算每一个数值出现多少次,并按入桶出桶原理(先入先出)原则重新排序。
a <- {
'0':0,
'1':2,
'2':1,
'3':56,
'4':3,
'5':67,
'6':3,
'length':7, //这里的数组里面的length并不是里面有多少个数据,而是指数组里面最大序列的编号+1,因为数组是从0开始的!!!
}
hash <- {} //我们需要新生成一个hash, 数组也是hash,因为都是一个key对应一个值。
while index <- 0
while index < a['length'] //while是循环语句,是指当满足这一条件的时候,该区域代码将重复执行,知道不满足条件为止。这里是说如果我们的index < a['length'] 例如我们这里 index6(a0~a6) < 7(a['length'])
number <- a[index]
if hash[number] < == undefined // 检测 hash[number]数值在hash中是否存在, 比如a[index1]对应的数值是2,所以我们检测 hash[2] 是否存在,如果没有的话 执行...
hash[number] = 1
else
hash[number] = hash[number] + 1
end
index2 <- 0 // index2 是hash左边的序列号的统称,也就是容器的编号,也是从0号开始的
max <- findMax(a) //找出a数组的最大值比如我们例子中最大值是67,虽然最大值是67,所以67在hash中的序号是67,但是在hash中,length并不是67,因为hash也是从0开始的数组。
newArr <- {}
while index2 < max + 1 //while是循环语句,是指当满足这一条件的时候,该区域代码将重复执行,知道不满足条件为止。 例如这里最大值虽然最大值是67,所以67在hash中的序号是67,但是在hash中,length并不是67,因为hash也是从0开始的数组。所以是 最大值 + 1 count <- hash[index2] //将hash[index2]也就是hash序列右边的数值赋予一个到 count的变量中
count = hash[index2] //将hash数组中,序号对应的右边的值赋值给count这个变量,有可能存在这个变量也就是hash[index2] 无值的情况。所以下面那句给了个条件,也就是a数组里面的每一个数值都在hash中的序列中。例如a数组中并没有5这个值,那么在hash[index5]对应的count就是不存在的。
if count != undefined // 条件语句,undefined (adj. 未阐明的; 未限定的); 如果 count 不是 未定义的,则执行下列语句。其实该句是由 if count = undefined的反推,如果count不等于undefined,我们将会做这些事情。
countIndex <- 0 // 在满足上面的if条件语句下,count最少是1,也就是桶里面产生了一个数据处于桶的最下方,所以我们先给他定义countIndex[0],也有可能桶里面存在多个数值,那么就会有countIdext[0,1,2,3,4,5,6]多个值的情况,0排在最底层,依次往上。
while countIndex < count // 循环语句,该循环是进入桶里面循环的句子,当count的序号值小于 count数量的时候
newArr.push(index2) //给新的数组推一个hash[index2]对应的数值
countIndex <- countIndex + 1 //然后桶里面数值对应的序号也就是countIdex 递增+1
end
end
index2 <- index2 + 1 //进入下一个桶里面
end
print newArr //打印newArr数组里面的数值
网友评论