//基数排序functionradixSort(array){//首先遍历数组,找出最大的数let max =0;for(let i =0; i < array.length; i++){let temp =0;if(array[i]> max){
max = array[i];}}//求数组中最大数的长度
max = max +"";//创建一个二维数组来暂时存放以基数分类的元素var temp =[];for(let i =0; i <10; i++){
temp[i]=[];for(let j =0; j < array.length; j++){
temp[i][j]=0;}}// for(let value of temp){// console.log(value);// }//存放每个对应的二维数组里存了几个元素var counts =[];for(let i =0; i <10; i++){
counts[i]=0;}//首先遍历数组,从个位开始//console.log(max.length);for(let i =0,n =1; i < max.length; i++,n*=10){for(let j =0; j < array.length; j++){let te =(Math.floor(array[j]/n))%10;////console.log(te);
temp[te][counts[te]]= array[j];
counts[te]++;}// if(i==1){// for(let value of temp){// console.log(value);// }// }var index =0;for(let k =0; k < counts.length; k++){if(counts[k]!=0){for(let m =0; m < counts[k]; m++){
array[index]= temp[k][m];
index++;
temp[k][m]=0;}//因为还要进行循环,所以要将计数进行清零
counts[k]=0;}//console.log(array);}
console.log(array);}}
堆排序
functionHeapSort(array){//堆排序符合完全二叉树的规则,完全二叉树的最后一个非叶子节点为n/2-1//开始位置是最后一个非叶子节点,也就是最后一个叶子节点的父节点let start = Math.floor(array.length/2-1);//let start = array.length/2-1;//console.log(start);//调整为大顶堆for(let i = start;i>=0;i--){MaxHeap(array,array.length,i);}//console.log(array);//排序for(let i = array.length-1;i>0;i--){//依次将大顶堆第一个元素换到后面let temps = array[0];
array[0]= array[i];
array[i]= temps;//重排大顶堆,保证第一个节点是最大的MaxHeap(array,i,0);}//打印排序后的数组
console.log(array);//需要一个将数组元素转成大顶堆的方法functionMaxHeap(array,size,index){let temp;//左子节点let leftNode =2*index+1;//右子节点let rightNode =2*index+2;let max = index;//对比两个子节点,找出最大的节点if(leftNode<size&&array[leftNode]>array[max]){
max = leftNode;}if(rightNode<size&&array[rightNode]>array[max]){
max = rightNode;}//交换位置if(index != max){
temp = array[index];
array[index]= array[max];
array[max]= temp;//交换位置之后,可能会破坏之前的堆,所以,需要重排MaxHeap(array,size,max);}}}