十大基本算法介绍Tozhang

其中插入算法和归并算法对重复率比较高的排序比较友好;冒泡算法不适合大量数据。

二、具体定义:

1.冒泡排序:

*概念:冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

*算法描述:

*动画演示:

*算法实例:

functionbubbleSort(arr){varlen=arr.length;for(vari=0;iarr[j+1]){//相邻元素两两对比vartemp=arr[j+1];//元素交换arr[j+1]=arr[j];arr[j]=temp;}}}returnarr;}vararr=[6,5,4,3,2,1];console.log(arr);//[6,5,4,3,2,1]bubbleSort(arr);console.log(arr);//[1,2,3,4,5,6]

2.选择排序:

*概念:选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述如下:

functionselectionSort(arr){if(arr==null||arr.length<2){returnarr;}for(vari=0;i<(arr.length-1);i++){letminIndex=i;for(letj=i+1;j

3.插入排序:

*概念:插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:

functioninsertionSort(arr){if(arr==null||arr.length<2){returnarr;}for(leti=1;i=0&&arr[j]>arr[j+1];j--){lettemp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}returnarr;}vararr=[3,4,2,1,6,7,8,4];console.log(arr);//[3,4,2,1,6,7,8,4]insertionSort(arr);console.log(arr);//[1,2,3,4,4,6,7,8]

4.希尔排序:

*概念:1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。

希尔排序的核心在于间隔序列的设定。既可以提前设定好间隔序列,也可以动态的定义间隔序列。动态定义间隔序列的算法是《算法(第4版)》的合著者RobertSedgewick提出的。

先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,具体算法描述:

functionshellSort(arr){varlen=arr.length;for(vargap=Math.floor(len/2);gap>0;gap=Math.floor(gap/2)){for(vari=gap;i=0&&arr[j]>arr[gap+j];j-=gap){vartemp=arr[j];arr[j]=arr[gap+j];arr[gap+j]=temp;}}}}vararr=[49,38,65,97,76,13,27,49,55,04];console.log(arr);//[49,38,65,97,76,13,27,49,55,4]shellSort(arr);console.log(arr);//[4,13,27,38,49,49,55,65,76,97]

5.归并算法:

*概念:归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(DivideandConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。

functionmergeSort(arr){if(arr.length==1){returnarr;}varmid=Math.floor(arr.length/2);varleftArr=arr.slice(0,mid);varrightArr=arr.slice(mid);returnmerge(mergeSort(leftArr),mergeSort(rightArr));}functionmerge(leftArr,rightArr){varresult=[];while(leftArr.length&&rightArr.length){if(leftArr[0]

6.快速排序:

*概念:快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:

constquickSort=(array)=>{constsort=(arr,left=0,right=arr.length-1)=>{if(left>=right){//如果左边的索引大于等于右边的索引说明整理完毕return}leti=leftletj=rightconstbaseVal=arr[j]//取无序数组最后一个数为基准值while(ii&&arr[j]>=baseVal){//找到一个比基准值小的数交换j--}arr[i]=arr[j]//将较小的值放在左边如果没有找到比基准值小的数就是将自己赋值给自己(i等于j)}arr[j]=baseVal//将基准值放至中央位置完成一次循环(这时候j等于i)sort(arr,left,j-1)//将左边的无序数组重复上面的操作sort(arr,j+1,right)//将右边的无序数组重复上面的操作}constnewArr=array.concat()//为了保证这个函数是纯函数拷贝一次数组sort(newArr)returnnewArr}vararr=[6,5,4,5,3,4,1];console.log(arr);//[6,5,4,5,3,4,1]console.log(quickSort(arr));//[1,3,4,4,5,5,6]

7.堆排序:

*概念:堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

8.计数排序:

functioncountingSort(arr,maxValue){varbucket=newArray(maxValue+1),sortedIndex=0,arrLen=arr.length,bucketLen=maxValue+1;for(vari=0;i0){arr[sortedIndex++]=j;bucket[j]--;}}returnarr;}vararr=[4,3,3,2,3,4,5,6,3,5,6,4,6,5,2,1,2];console.log(arr);countingSort(arr,6);console.log(arr);

9.桶排序:

*概念:桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。

桶排序(Bucketsort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排)。

10.基数排序:

*概念:基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。

基数排序的空间复杂度为O(n+k),其中k为桶的数量。一般来说n>>k,因此额外空间需要大概n个左右。

functionradixSort(arr,maxDigit){varcounter=[];varmod=10;vardev=1;for(vari=0;i

THE END
1.推荐算法介绍推荐算法介绍 随着计算机领域技术的高速发展,电子商务时代的普及,个性化的推荐系统深入生活应用的各个方面。个性化推荐算法是推荐系统中最核心的技术,在很大程度上决定了电子商务推荐系统性能的优劣。而协同过滤推荐是个性化推荐系统应用最为广泛的技术,协同过滤推荐主要分为基于用户的协同过滤推荐、基于项目的协同过滤推荐和https://blog.csdn.net/u012050154/article/details/52267712
2.常用的几种推荐算法介绍常用的几种推荐算法介绍 个性化推荐(推荐系统)经历了多年的发展,已经成为互联网产品的标配,也是 AI 成功落地的分支之一,在电商(淘宝/京东)、资讯(今日头条/微博)、音乐(网易云音乐/QQ音乐)、短视频(抖音/快手)等热门应用中,推荐系统都是核心组件之一。https://www.51cto.com/article/778534.html
3.KNN算法介绍一、算法介绍 邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。 kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这https://www.jianshu.com/p/80dc05f52ed8
4.2.评测算法详细介绍—AI语音识别模型评测算法 2.1.BA算法 算法介绍 BA的全称是 Boundary Attack。该算法使用目标类中的一个样本初始化为非目标攻击,并用一个混合了均匀噪声的样本初始化为目标攻击。算法的每次迭代有三个部分。首先,通过二进制搜索将上次迭代的迭代结果推向边界。 https://numbda.cs.tsinghua.edu.cn/AI-Testing/vision/methods.html
5.什么是哈希算法?常见的哈希算法有哪些?区块链技术区块链哈希算法是一种数学函数或者算法,它可以将任意长度的数据(称为“消息”)转换为固定长度的字符串(称为“哈希值”或者简称“哈希”)。哈希算法的作用是将数据进行一次性的加密,从而生成一个唯一且不可逆的标识。哈希算法在数据安全、数据压缩、数据检索等领域有着广泛的应用。本文将介绍哈希算法的原理、特点、用途和常https://www.jb51.net/blockchain/891421.html
6.十大排序算法之冒泡排序快速排序的介绍十大排序算法之冒泡排序、快速排序的介绍 江海入海,知识涌动,这是我参与江海计划的第4篇。 一、插入排序 在我们的日常生活最常见的一个场景就是斗地主,我们在斗地主摸牌的过程中其实就是利用插入排序来整理我们摸到的牌,按照从大到小或者从小到大的进行比较,大的放左边或者小的放左边。斗地主摸牌流程是这样的:https://open.alipay.com/portal/forum/post/129601176
7.王者荣耀英雄战力值怎么计算英雄战力值算法详细介绍王者荣耀英雄战力值怎么计算?很多小伙伴对于战力值的计算方法不太清楚,那么小编就给大家介绍一下,下面小编给大家带来《王者荣耀》英雄战力值算法详细介绍,还不清楚的小伙伴赶紧来看看吧。 《王者荣耀》英雄战力值算法详细介绍 英雄战力的组成由五个部分,分别是胜场战力、排位表现分、巅峰表现战力、巅峰系数、活跃系数。https://shouyou.3dmgame.com/gl/278850.html
8.机器人算法专题介绍腾讯云开发者社区机器人算法专题介绍 算法 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同https://cloud.tencent.com/developer/article/1081643
9.算法图解(豆瓣)本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量。书中的前三章将帮助你打下基础,带你学习二分查找、大O表示法、两种基本的数据结构以及递归等。余下的篇幅将主要介绍应用广泛的算法,具体内容包括:面对具体问题时的解决技巧,比如,何时采用贪婪算法或动态规划https://www.douban.com/doubanapp/dispatch?uri=/book/26979890/