手机版

JavaScript实现的九种排序算法

时间:2021-08-27 来源:互联网 编辑:宝哥软件园 浏览:

前言

排序是数据结构的主要内容,不限于语言,主要在于思想;大学曾经研究过一段时间C语言排序的实现。在此期间,可以自由地用JS熟悉排序的知识点。

下面就不多说了,我们来看看详细的介绍

一、代码汇总(一)

1.气泡分类

2.改进的气泡分类

3.选择排序

4.直接插入排序

5.二进制插入排序

/* * @ Author by: laifeipeng * @ Date : 2019-02-20 10:00:36 * @最后修改人: lai fepeng * @最后修改时间: 2019-02-21 11:573:58 */* * * * * * * * * 1。冒泡排序* * * * * * * * * *///是一种非常常见且容易理解的排序算法。排序的思路是遍历数组,每次遍历都会是最好的,查询遍历的越晚,查询的数量就越少。const冒泡排序=arr={ const list=arr . slice();//确保函数是一个纯函数const len=list.lengthfor(设I=0;我透镜;i ) { for(让j=len-1;j . I;j-){ if(list[j]list[j-1]){[list[j-1],list[j]]=[list[j],list[j-1]];} } }返回列表;}/* * * * * * * * 2.冒泡排序的改进版* * * * * * * * *///以上冒泡排序的一个优化,优化思路:当数组在一次遍历前后没有变化时,表示数组已经排序,排序完毕。const bubblesort 2=arr={ const list=arr . slice();//确保函数是一个纯函数const len=list.lengthfor(设I=0;我透镜;I){ let exchange=false;for(让j=len-1;j . I;j-){ if(list[j]list[j-1]){[list[j-1],list[j]]=[list[j],list[j-1]];exchange=true} } if(!exchange)退货清单}退货清单;}/* * * * * * * * 3.选择排序* * * * * * * * * * *//选择无序区域中最小的元素,然后将其位置与无序区域中的第一个元素交换。const selection start=arr={ const list=arr . slice();//确保函数是一个纯函数const len=list.lengthfor(设I=0;我透镜;I){ let k=I for(let j=len-1;j . I;j-){ if(list[j]list[k])k=j;} if (k!==i) { [list[k],list[i]]=[list[i],list[k]];} }返回列表;}/* * * * * * * * 4.直接插入排序* * * * * * * * * * *///选择无序区域的第一个元素,插入有序区域,排序const insert short=arr={ const list=arr . slice();//确保函数是一个纯函数const len=list.lengthfor(设I=1;我透镜;I){ const tmp=list[I];设j=I-1;while(j=0 tmp list[j]){ list[j 1]=list[j];j-;} list[j 1]=tmp;}返回列表;}/* * * * *请确保该函数是一个纯函数const len=list.lengthfor(设I=1;我透镜;I){ const tmp=list[I];设low=0;设high=I-1;设j=I-1;while(low=high){ const mid=~ ~((low high)/2);if (tmp列表[mid]){ high=mid-1;} else { low=mid 1;} } while(j high){ list[j 1]=list[j];j-;} list[j 1]=tmp;}返回列表;}2.代码摘要(2)

6.快速分类

7.原位算法快速排序

8.希尔分类

堆排序、合并排序(js实现没有优势,也不会实现)

/* * * *//为了确保这个函数是纯函数,复制if (list.length=1)数组返回list一次;const pivot=list.splice(0,1)[0];//选择第一个作为基数,从数组const left=[]中删除基数;const right=[];for(设i=0,len=list.length我透镜;I) {//从0开始if (list [I] pivot) {left。推送(列表[I]);} else { right . push(list[I]);} }返回[.快速排序(左),枢轴,快速排序(右)];}//高于constpivot=list。split (0,1)[0];如果想直接改成list[0],那么应该从i=1开始,const quick sort 2=arr={ const list=arr . slice();//为了确保这个函数是纯函数,复制if (list.length=1)数组返回list一次;const pivot=list[0];//选择第一个作为基数const left=[];const right=[];for(设i=1,len=list.length我透镜;I) {//从1开始if (list [I] pivot) {left。推送(列表[I]);} else { right . push(list[I]);} }返回[.快速排序(左),枢轴,快速排序(右)];}/********* 7.通过原位算法进行快速排序* * * * * * * * * */const快速排序=arr={constlist=arr。slice()//为了确保这个函数是纯函数,复制数组const sort=(arr,left=0,Right=arr。length-1)={ If(left=right){//如果左索引大于或等于右索引描述,则返回;}让我=左;让j=右;const BaseVal=arr[j];//取无序数组的最后一个数字作为参考值,而(i j) {//将所有小于参考值的数字放在左边,而(i j arr[i]=baseVal) {//为I找一个大于参考值的数字;} arr[j]=arr[I];//将较大的值放在右边。如果没有大于参考值的数字,给自己赋值(I等于J),而(j i arr[j]=baseVal) {//找一个小于参考值的数字来交换J-;} arr[I]=arr[j];//将较小的值放在左边。如果找不到小于参考值的数字,就给自己赋值(I等于j)} arr[j]=baseVal;//将参考值放在中心位置,完成一个循环(此时j等于I)排序(arr,left,j-1);//对左边的无序数组重复上述操作排序(arr,j ^ 1,右);//对右边的无序数组重复以上操作}排序(列表);退货清单;}/********* 8、Hill排序* * * * * * * * *///排序思路:首先将待排序记录的整个序列划分为若干个子序列,在序列中直接插入排序,然后在整个序列基本有序的情况下,直接将所有记录插入排序一次。const shellSort=arr={ const list=arr . slice();//确保函数是一个纯函数const len=list.length让gap=~ ~(len/2);while (gap 0) { for(让i=gap我透镜;I){ const tmp=list[I];设j=I-gap;while(j=0 tmp list[j]){ list[j gap]=list[j];j=j -间隙;} list[j gap]=tmp;} gap=~ ~(gap/2);}返回列表;}

3.翻译

4.回答

1.如何在控制台上打印出上图中的颜色效果,例如:

Const log step=(i,leftarr,rightarr)=console.log (`% c ${i}订单:% c $ { arrstr(left arr)} % c $ { arrstr(right arr)} ` ,' color:绿色',' color :红色' 2。交换数组2的元素:

//用索引I和k交换数组元素[list [k],list [I]]=[list [I],list[k]];3.所有源代码github地址:

https://github.com/laifeipeng/utils/blob/master/sort/sort.js

4.彩色打印效果的github地址:

https://github.com/laifeipeng/utils/blob/master/sort/test.js

摘要

以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。

版权声明:JavaScript实现的九种排序算法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。