几种经典排序算法的JS实现方法
一.冒泡排序
functionBubbleSort(array){ varlength=array.length; for(vari=length-1;i>0;i--){//用于缩小范围 for(varj=0;j<i;j++){//在范围内进行冒泡,在此范围内最大的一个将冒到最后面 if(array[j]>array[j+1]){ vartemp=array[j]; array[j]=array[j+1]; array[j+1]=temp; } } console.log(array); console.log("-----------------------------"); } returnarray; } vararr=[10,9,8,7,7,6,5,11,3]; varresult=BubbleSort(arr); console.log(result); /* [9,8,7,7,6,5,10,3,11] ----------------------------- [8,7,7,6,5,9,3,10,11] ----------------------------- [7,7,6,5,8,3,9,10,11] ----------------------------- [7,6,5,7,3,8,9,10,11] ----------------------------- [6,5,7,3,7,8,9,10,11] ----------------------------- [5,6,3,7,7,8,9,10,11] ----------------------------- [5,3,6,7,7,8,9,10,11] ----------------------------- [3,5,6,7,7,8,9,10,11] ----------------------------- [3,5,6,7,7,8,9,10,11] */
二.选择排序
functionSelectionSort(array){ varlength=array.length; for(vari=0;i<length;i++){//缩小选择的范围 varmin=array[i];//假定范围内第一个为最小值 varindex=i;//记录最小值的下标 for(varj=i+1;j<length;j++){//在范围内选取最小值 if(array[j]<min){ min=array[j]; index=j; } } if(index!=i){//把范围内最小值交换到范围内第一个 vartemp=array[i]; array[i]=array[index]; array[index]=temp; } console.log(array); console.log("---------------------"); } returnarray; } vararr=[1,10,100,90,65,5,4,10,2,4]; varresult=SelectionSort(arr); console.log(result); /* [1,10,100,90,65,5,4,10,2,4] --------------------- [1,2,100,90,65,5,4,10,10,4] --------------------- [1,2,4,90,65,5,100,10,10,4] --------------------- [1,2,4,4,65,5,100,10,10,90] --------------------- [1,2,4,4,5,65,100,10,10,90] --------------------- [1,2,4,4,5,10,100,65,10,90] --------------------- [1,2,4,4,5,10,10,65,100,90] --------------------- [1,2,4,4,5,10,10,65,100,90] --------------------- [1,2,4,4,5,10,10,65,90,100] --------------------- [1,2,4,4,5,10,10,65,90,100] --------------------- [1,2,4,4,5,10,10,65,90,100] */
三.插入排序
functionInsertionSort(array){ varlength=array.length; for(vari=0;i<length-1;i++){ //i代表已经排序好的序列最后一项下标 varinsert=array[i+1]; varindex=i+1;//记录要被插入的下标 for(varj=i;j>=0;j--){ if(insert<array[j]){ //要插入的项比它小,往后移动 array[j+1]=array[j]; index=j; } } array[index]=insert; console.log(array); console.log("-----------------------"); } returnarray; } vararr=[100,90,80,62,80,8,1,2,39]; varresult=InsertionSort(arr); console.log(result); /* [90,100,80,62,80,8,1,2,39] ----------------------- [80,90,100,62,80,8,1,2,39] ----------------------- [62,80,90,100,80,8,1,2,39] ----------------------- [62,80,80,90,100,8,1,2,39] ----------------------- [8,62,80,80,90,100,1,2,39] ----------------------- [1,8,62,80,80,90,100,2,39] ----------------------- [1,2,8,62,80,80,90,100,39] ----------------------- [1,2,8,39,62,80,80,90,100] ----------------------- [1,2,8,39,62,80,80,90,100] */
四.希尔排序
functionShellSort(array){ varlength=array.length; vargap=Math.round(length/2); while(gap>0){ for(vari=gap;i<length;i++){ varinsert=array[i]; varindex=i; for(varj=i;j>=0;j-=gap){ if(insert<array[j]){ array[j+gap]=array[j]; index=j; } } array[index]=insert; } console.log(array); console.log("-----------------------"); gap=Math.round(gap/2-0.1); } returnarray; } vararr=[13,14,94,33,82,25,59,94,65,23,45,27,73,25,39,10]; varresult=ShellSort(arr); console.log(result); /* [13,14,45,27,73,25,39,10,65,23,94,33,82,25,59,94] ----------------------- [13,14,39,10,65,23,45,27,73,25,59,33,82,25,94,94] ----------------------- [13,10,39,14,45,23,59,25,65,25,73,27,82,33,94,94] ----------------------- [10,13,14,23,25,25,27,33,39,45,59,65,73,82,94,94] ----------------------- [10,13,14,23,25,25,27,33,39,45,59,65,73,82,94,94] */
五.归并排序
functionMergeSort(array){ varlength=array.length; if(length<=1){ returnarray; }else{ varnum=Math.ceil(length/2); varleft=MergeSort(array.slice(0,num)); varright=MergeSort(array.slice(num,length)); returnmerge(left,right); } } functionmerge(left,right){ console.log(left); console.log(right); vara=newArray(); while(left.length>0&&right.length>0){ if(left[0]<=right[0]){ vartemp=left.shift(); a.push(temp); }else{ vartemp=right.shift(); a.push(temp); } } if(left.length>0){ a=a.concat(left); } if(right.length>0){ a=a.concat(right); } console.log(a); console.log("-----------------------------"); returna; } vararr=[13,14,94,33,82,25,59,94,65,23,45,27,73,25,39,10]; varresult=MergeSort(arr); console.log(result); /* [13] [14] [13,14] ----------------------------- [94] [33] [33,94] ----------------------------- [13,14] [33,94] [13,14,33,94] ----------------------------- [82] [25] [25,82] ----------------------------- [59] [94] [59,94] ----------------------------- [25,82] [59,94] [25,59,82,94] ----------------------------- [13,14,33,94] [25,59,82,94] [13,14,25,33,59,82,94,94] ----------------------------- [65] [23] [23,65] ----------------------------- [45] [27] [27,45] ----------------------------- [23,65] [27,45] [23,27,45,65] ----------------------------- [73] [25] [25,73] ----------------------------- [39] [10] [10,39] ----------------------------- [25,73] [10,39] [10,25,39,73] ----------------------------- [23,27,45,65] [10,25,39,73] [10,23,25,27,39,45,65,73] ----------------------------- [13,14,25,33,59,82,94,94] [10,23,25,27,39,45,65,73] [10,13,14,23,25,25,27,33,39,45,59,65,73,82,94,94] ----------------------------- [10,13,14,23,25,25,27,33,39,45,59,65,73,82,94,94] */
六.快速排序
functionQuickSort(array){ varlength=array.length; if(length<=1){ returnarray; }else{ varsmaller=[]; varbigger=[]; varbase=[array[0]]; for(vari=1;i<length;i++){ if(array[i]<=base[0]){ smaller.push(array[i]); }else{ bigger.push(array[i]); } } console.log(smaller.concat(base.concat(bigger))); console.log("-----------------------"); returnQuickSort(smaller).concat(base.concat(QuickSort(bigger))); } } vararr=[8,10,100,90,65,5,4,10,2,4]; varresult=QuickSort(arr); console.log(result); /* [5,4,2,4,8,10,100,90,65,10] ----------------------- [4,2,4,5] ----------------------- [2,4,4] ----------------------- [2,4] ----------------------- [10,10,100,90,65] ----------------------- [90,65,100] ----------------------- [65,90] ----------------------- [2,4,4,5,8,10,10,65,90,100] */
以上这篇几种经典排序算法的JS实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。