首页 > 编程知识 正文

js 排序算法,javascript排序

时间:2023-05-05 18:05:58 阅读:168380 作者:352

js排序:冒泡排序:

letarr=[ 145,248,31,45,9,11,145,300 ]; //气泡排序//双for嵌套functionarrsort(arr ) ) for(letI=0; i arr.length - 1; I ) )//遍历,其中arr.length-1在最后不使用循环。 for(letj=0; j arr.length - i; ()//双扫描,遍历I之后的数。 例如,如果有8个元素,并且I位于第一项,则遍历以下7项: if(arr[j]arr[j-1] ) /如果右边小于左边,更换位置。 let temp=arr[j]; arr[j]=arr[j-1]; arr[j-1]=temp; } } } return arr; }console.log(arrsort(arr ) ); //sort排序letarrnew=arr.sort(function(a,b ) ) { return a - b //升序默认值///returnB-a////逆序} ); console.log(arrnew; 插入排序:

//插入排序letarr=[ 145,248,31,45,9,11,145,300 ]; functionarrsort(Array ) for ) letI=1; i array.length; I ()//遍历数组的波,从数组的第二项开始let key=array[i]; //这里必须定义。 循环结束,所以使用。 let j=i - 1; //j定义为i-1,在最初的遍历中,如果从阵列的第一项开始while(j=0array[j]key )/j的值大于I的值,即如果左边大于右边,则j=0,j-)为负数array[j 1]=array[j]; /例如,第二项和第三项248和31是248、248j----; 24831执行成功后,到248、248时,依次判断左侧是否有更小的东西。 } array[j 1]=key; //将第一项代入最小的。 }返回阵列; }console.log(arrsort(arr ) ); 选择排序:

//排序letarr=[ 145,248,31,45,9,11,145,300 ]; functionarrsort(arr ) for ) letI=0; i arr.length - 1; I ()//数组let min=arr[i]; 防止arr[i]变化的for(letj=I1; j arr.length - 1; j ) )//进行双重扫描,寻找最小的数量进行交换。 与冒泡的不同之处在于,选择排序,如果第4位更小,则为1、4位的交换,而不是3、4位的交换if (minarr [ j ] ) { let temp=min; min=arr[j]; arr[j]=temp; } } arr[i]=min; } return arr; }console.log(arrsort(arr ) ); 合并排序:

//分治排序letarr=[ 145,248,31,45,9,11,145,300 ]; functionmerge(left,right ) { let result=[]; while (left.length0right.length0)//两侧数组中的值if ) left[0]right () (/左边为右边的result.push ) ) ) 向result数组添加值,用right删除值}//*左右数组的长度不同时,链接比较后剩下的数组条目即可*/return [.result, left, right] //百度一眼就能做到。 left.right,万一长度不相等就会变成少数,所以添加这两个。 }functionmergesort(arr ) if ) arr.length==1) /如果数组长度为1,则返回数组); letmid=math.floor(ARR.Length/2 ); 分为//letleft_arr=arr.slice(0,mid )两部分; //把数组分成两部分塞进去。 假设数组有8个元素,分为两部分,左(0,4 ) letright_arr=arr.slice(mid ); //右(从4到后面全部) returnmerge ) mergesort(left_arr ),mergesort ) right_arr; //递归}console.log(mergesort(arr ) ); 快速排序:

//快速排序letarr=[ 145,248,31,45,9,11,145,300 ]; functionarrsort(arr ) if ) arr.length=1) { return arr } ); varpivotindex=math.floor (arr.length/2 ); varpivot=arr.splice(pivotindex,1 ) [0]; //取出中间的数字,如第一次9 var left=[]; var right=[]; for(varI=0; i arr.length; I ) if(ARR[I]pivot ) (/第一次运算,如果小于9则进入左排列,如果大于9则进入右排列的left.push ) ARR[I]。 }else{right.push(arr[I]; }returnarrsort(left ).concat (pivot ),arrsort ) right ); //递归地再将左数组分成两半进行排序。 右边的排列也一样。 }console.log(arrsort(arr ) ); 希尔排序:

//希尔排序letarr=[ 145,248,31,45,9,11,145,300 ]; functionarrsort(arr ) ) letgap=math.floor ) arr.length/2; wile(gap=1) for ) letI=gap; iarr.length; I ) { let j,temp=arr[i]; for(j=I-gap; j=0temparr[j]; j=j-gap({arr[jgap]=arr[j]; } arr[j gap]=temp; }gap=math.floor(gap/2 ); } return arr; }console.log(arrsort(arr ) );

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。