1. let countSort = arr =>{
    2. let hashTable = {}, max = 0, result = []
    3. for(let i=0; i<arr.length; i++){
    4. if(!(arr[i] in hashTable)){
    5. hashTable[arr[i]] = 1
    6. }else{
    7. hashTable[arr[i]] += 1
    8. }
    9. if(arr[i] > max) {max = arr[i]}
    10. }
    11. for(let j=0; j<=max; j++){
    12. if(j in hashTable){
    13. for(let i = 0; i<hashTable[j]; i++){
    14. result.push(j)
    15. }
    16. }
    17. }
    18. return result
    19. }
    1. let mergeSort = arr =>{
    2. let k = arr.length
    3. if(k===1){return arr}
    4. let left = arr.slice(0, Math.floor(k/2))
    5. let right = arr.slice(Math.floor(k/2))
    6. return merge(mergeSort(left), mergeSort(right))
    7. }
    8. let merge = (a, b)=>{
    9. if(a.length === 0) return b
    10. if(b.length === 0) return a
    11. return a[0] > b[0] ?
    12. [b[0]].concat(merge(a, b.slice(1))) :
    13. [a[0]].concat(merge(a.slice(1), b))
    14. }
    1. let quickSort = arr => {
    2. if (arr.length <= 1) { return arr; }
    3. let pivotIndex = Math.floor(arr.length / 2);
    4. let pivot = arr.splice(pivotIndex, 1)[0];
    5. let left = [];
    6. let right = [];
    7. for (let i = 0; i < arr.length; i++){
    8. if (arr[i] < pivot) { left.push(arr[i])
    9. } else { right.push(arr[i]) }
    10. }
    11. return quickSort(left).concat(
    12. [pivot], quickSort(right) )
    13. }