常用排序算法javascript实现.docx
常用排序算法JAVASCRIPT实现1、插入排序1)算法描述和实现一般来说,插入排序都采用INPLACE在数组上实现。具体算法描述如下1从第一个元素开始,该元素可以认为已经被排序;2取出下一个元素,在已经排序的元素序列中从后向前扫描;3如果该元素(已排序)大于新元素,将该元素移到下一位置;4重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;5将新元素插入到该位置后;重复步骤25。JAVASCRIPT代码实现FUNCTIONINSERTIONSORTARRAY{IFOBJECTPROTOTYPETOSTRINGCALLARRAYSLICE8,1ARRAY{FORVARI1I0J}ARRAYJ1KEY}RETURNARRAY}ELSE{RETURNARRAYISNOTANARRAY}}3)算法分析最佳情况输入数组按升序排列。TNON最坏情况输入数组按降序排列。TNON2平均情况TNON2二、二分插入排序1)算法简介二分插入(BINARYINSERTSORT排序是一种在直接插入排序算法上进行小改动的排序算法。其与直接插入排序算法最大的区别在于查找插入位置时使用的是二分查找的方式,在速度上有一定提升。2)算法描述和实现一般来说,插入排序都采用INPLACE在数组上实现。具体算法描述如下从第一个元素开始,该元素可以认为已经被排序;取出下一个元素,在已经排序的元素序列中二分查找到第一个比它大的数的位置;将新元素插入到该位置后;重复上述两步。JAVASCRIPT代码实现FUNCTIONBINARYINSERTIONSORTARRAY{IFOBJECTPROTOTYPETOSTRINGCALLARRAYSLICE8,1ARRAY{FORVARI1ILEFTJ{ARRAYJ1ARRAYJ}ARRAYLEFTKEY}RETURNARRAY}ELSE{RETURNARRAYISNOTANARRAY}}3)算法分析最佳情况TNONLOGN最差情况TNON2平均情况TNON2三、选择排序1)算法简介选择排序SELECTIONSORT是一种简单直观的排序算法。它的工作原理首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。2)算法描述和实现N个记录的直接选择排序可经过N1趟直接选择排序得到有序结果。具体算法描述如下初始状态无序区为R1N,有序区为空;第I趟排序I1,2,3N1开始时,当前有序区和无序区分别为R1I1和RIN)。该趟排序从当前无序区中选出关键字最小的记录RK,将它与无序区的第1个记录R交换,使R1I和RI1N分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;N1趟结束,数组有序化了。JAVASCRIPT代码实现FUNCTIONSELECTIONSORTARRAY{IFOBJECTPROTOTYPETOSTRINGCALLARRAYSLICE8,1ARRAY{VARLENARRAYLENGTH,TEMPFORVARI0I0I{HEAPIFYARRAY,I,HEAPSIZE}//堆排序FORVARJHEAPSIZE1J1J{TEMPARRAY0ARRAY0ARRAYJARRAYJTEMPHEAPIFYARRAY,0,HEAPSIZE}}ELSE{RETURNARRAYISNOTANARRAY}}/方法说明维护堆的性质PARAMARR数组PARAMX数组下标PARAMLEN堆大小/FUNCTIONHEAPIFYARR,X,LEN{IFOBJECTPROTOTYPETOSTRINGCALLARRSLICE8,1ARRAYIFLARRLARGEST{LARGESTL}IFRARRLARGEST{LARGESTR}IFLARGESTX{TEMPARRXARRXARRLARGESTARRLARGESTTEMPHEAPIFYARR,LARGEST,LEN}}ELSE{RETURNARRISNOTANARRAYORXISNOTANUMBER}}3)算法分析最佳情况TNONLOGN最差情况TNONLOGN平均情况TNONLOGN七、归并排序1)算法简介归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(DIVIDEANDCONQUER)的一个非常典型的应用。归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2路归并。2)算法描述和实现具体算法描述如下把长度为N的输入序列分成两个长度为N/2的子序列;对这两个子序列分别采用归并排序;将两个排序好的子序列合并成一个最终的排序序列。JAVASCRIPT代码实现FUNCTIONMERGESORTARRAY,P,R{IFP1FORVARI1IARRAYIMAXARRAYI}SPACEMAXMIN1/NUMFORVARJ0J0K}BUCKETSINDEXK1ARRAYJ}ELSE{//空桶,初始化BUCKETSINDEXBUCKETSINDEXPUSHARRAYJ}}WHILENARRAYIMAXARRAYICARRAYICARRAYICARRAYI11}FORVARJMINJ0K{BCARRAYK1ARRAYKCARRAYK}RETURNB}3)算法分析当输入的元素是N个0到K之间的整数时,它的运行时间是ONK。计数排序不是比较排序,排序的速度快于任何比较排序算法。由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小值的差加上1),这使得计数排序对于数据范围很大的数组,需要大量时间和内存。