当前位置: 首页 > Web前端 > JavaScript

js算法

时间:2023-03-27 16:09:19 JavaScript

1.1冒泡排序比较相邻元素。如果第一个比第二个大,交换它们functionbubbleSort(arr){varlen=arr.length;for(vari=0;iarr[j+1]){//相邻元素两两比较vartemp=arr[j+1];//元素交换arr[j+1]=arr[j];arr[j]=温度;}}}returnarr;}1.2选择性排序在未排序序列中找到最小(最大)的元素,存入已排序序列的起始位置,然后继续从剩余未排序元素中寻找最小(最大)元素,然后将其放在排序序列的末尾functionselectionSort(arr){varlen=arr.length;varminIndex,temp;for(vari=0;i=0&&arr[preIndex]>current){arr[preIndex+1]=arr[preIndex];preIndex--;}arr[preIndex+1]=当前;}returnarr;}1.4希尔排序首先将整个记录序列分成若干个子序列进行直接插入排序,当整个序列中的记录“基本有序”时,再对其中的所有记录进行直接插入排序转动。函数shellSort(arr){varlen=arr.length,temp,gap=1;while(gap0;gap=Math.floor(gap/3)){for(vari=gap;i=0&&arr[j]>temp;j-=gap){arr[j+gap]=arr[j];}arr[j+gap]=temp;}}returnarr;}1.5归并排序该算法是分治法的一个非常典型的应用。将有序的子序列组合起来,得到一个完全有序的序列;即先把每个子序列排好序,再把子序列段排好序。将两个排序列表合并为一个排序列表称为双向合并。functionmergeSort(arr){//使用自上而下的递归方法varlen=arr.length;如果(len<2){返回arr;}varmiddle=Math.floor(len/2),left=arr.切片(0,中间),右=arr。切片(中间);返回合并(合并排序(左),合并排序(右));}functionmerge(left,right){varresult=[];while(left.length&&right.length){if(left[0]<=right[0]){结果。推(左移());}其他{结果。推(右移());}}while(left.length)result.push(left.shift());while(right.length)result.push(right.shift());returnresult;}1.6QuickSort对.”functionquickSort(arr,left,right){varlen=arr.length,partitionIndex,left=typeofleft!='number'?0:left,right=typeofright!='number'?len-1:对;如果(左<右){分区索引=分区(arr,左,右);quickSort(arr,left,partitionIndex-1);quickSort(arr,partitionIndex+1,右);}returnarr;}functionpartition(arr,left,right){//分区操作varpivot=left,//设置基准值(pivot)index=pivot+1;for(vari=index;i<=right;i++){if(arr[i]pivo大腿;}arr[低]=arr[高];while(low=0;i--){heapify(arr,i);}}functionheapify(arr,i){//堆调整varleft=2*i+1,right=2*i+2,largest=i;if(leftarr[largest]){largest=left;}if(rightarr[largest]){largest=right;}if(largest!=i){swap(arr,i,largest);堆化(arr,最大);}}functionswap(arr,i,j){vartemp=arr[i];arr[i]=arr[j];arr[j]=temp;}functionheapSort(arr){buildMaxHeap(arr);对于(vari=arr.length-1;i>0;i--){swap(arr,0,i);伦--;堆化(arr,0);}returnarr;}1.8计数和排序计数和排序的核心是将输入的数据值转换成key,存储在额外的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入数据必须是一定范围内的整数。functioncountingSort(arr,maxValue){varbucket=newArray(maxValue+1),sortedIndex=0;arrLen=arr.length,bucketLen=maxValue+1;对于(vari=0;i0){arr[sortedIndex++]=j;桶[j]--;}}returnarr;}1.9桶排序就是把数组分成有限个桶。每个桶单独排序(可以使用其他排序算法或者递归地继续使用桶排序进行排序)。桶排序是鸽巢排序的归纳结果。当待排序数组中的值均匀分布时,桶排序需要线性时间(Θ(n))。但是桶排序不是比较排序,它不受O(nlogn)下界的影响。函数bucketSort(arr,bucketSize){if(arr.length===0){returnarr;}变种我;varminValue=arr[0];varmaxValue=arr[0];对于(i=1;imaxValue){maxValue=arr[i];//输入数据的最大值}}//桶初始化varDEFAULT_BUCKET_SIZE=5;//将桶的默认数量设置为5bucketSize=bucketSize||DEFAULT_BUCKET_SIZE;varbucketCount=Math.floor((maxValue-minValue)/bucketSize)+1;varbuckets=newArray(bucketCount);对于(i=0;i

最新推荐
猜你喜欢