python实现
def count_sort(arr):
max,min = findMaxAndMin(arr)
space = max - min
countArr = [0] * (space+1)
resultArr = [0] * (space+1)
for num in arr:
for j in range(0,space+1):
if num == j:
countArr[j]+=1
for i in range(0,len(countArr)):
if countArr[i] > 0:
tmp = countArr[i]
while tmp:
resultArr.append(min+i)
tmp-=1
return resultArr
def findMaxAndMin(arr=[]):
max = arr[0]
min = arr[0]
for i in range(1, len(arr)):
if arr[i] > max:
max = arr[i]
if arr[i] < min:
min = arr[i]
return max,min
my_array = list([4, 4, 6, 5, 3, 2, 8, 1, 7, 5, 6, 0, 10])
print(count_sort(my_array))
javascript实现
function count_sort(arr=[]){
const obj = getMaxAndMin(arr);
const max = obj.max || 0;
const min = obj.min || 0;
const space = max - min;
let countArr = [];
let result = [];
countArr.length = space + 1;
countArr.fill(0);
for(let i=0;i<=arr.length-1;i++){
for(let j=0;j<=countArr.length-1;j++){
if(arr[i] === j) countArr[j]++
}
}
for(let i=0;i<=countArr.length-1;i++){
if(countArr[i] > 0){
let tmp = countArr[i]
while(tmp > 0){
result.push(min+i)
tmp--;
}
}
}
return result;
}
function getMaxAndMin(arr=[]){
let max = min = space = 0;
arr.forEach(item => {
if(item > max) max = item;
if(item < min) min = item;
})
return {max,min};
}
let arr = [4, 4, 6, 5, 3, 2, 8, 1, 7, 5, 6, 0, 10];
count_sort(arr)