6常见的排序算法都有GIF动图,更容易帮助你理解排序思路。6种排序方式如下👇冒泡排序计数排序快速排序归并排序插入排序选择排序时间复杂度如图👇排序算法复杂度分析冒泡排序以下动图GIF来自智帅冒泡排序这个名字的由来是像泡泡一样往上飘。想一想,就是每次比较相邻的两个元素的大小,然后慢慢“浮”上去。让我们看看这个想法。《时间复杂度O(n*n)》思路1比较相邻元素。如果前者大于后者,则两者交换位置。2对每一对相邻的元素做同样的事情,从第一对到最后一对,这样最后一个元素就是最大的元素。3对n个元素重复上述步骤,每次循环排除当前最后一个。4重复步骤1~3直到排序完成。代码实现//最外层循环控制的内容是循环次数//每次比较的内容是相邻两个的大小关系letBubbleSort=function(arr,flag=0){letlen=arr.lengthfor(leti=0;iarr[j+1]){[arr[j],arr[j+1]]=[arr[j+1],arr[j]]}}}returnflag?arr.reverse():arr}letarr=[2,9,6,7,4,3,1,7]console.log(BubbleSort(arr,1))计数和排序从名字就知道了。它的思路是用数组元素作为数组的下标,然后用一个临时数组统计元素出现的次数。数组中的数据必须是整数,最大值和最小值相差不能太大。对于“如果数据是负面的,我的实施将对此进行优化”。《时间复杂度:O(n+k)》思路1.计算差值d,最小值小于0,加上自身2.创建统计数组,统计对应元素个数3.对统计数组进行变换,和后面的元素等于前面元素的总和,即排名数组4.遍历原数组,从统计数组中找到正确的位置,输出到结果数组动画计数排序代码实现//counting并排序letcountingSort=function(arr,flag=0){letmin=arr[0],max=arr[0],len=arr.length;//求最大值和最小值for(leti=0;iarr[i]){left.push(arr[i])}else{right.push(arr[i])}}returnquickSort(左)。concat([pivot],quickSort(right));}//letarr=[2,9,6,7,4,3,1,7]//console.log(quickSort(arr))合并排序两个有序将序列合并成有序序列,我们称之为“合并”的基本思想和过程:先递归分解序列,然后合并序列(分治思想的典型应用)“时间复杂度:O(nlog(n))”的想法将一个数组拆分为两组A和B,两组不断拆分,直到每组只有一个元素。分组按照拆分过程逐渐合并。由于每个组最初只有一个元素,因此可以看作是组内有序的,合并组可以看作是合并两个有序数组的过程。对左右小数列重复第二步,直到每个区间只有一个数。动画合并排序代码实现constmerge=(left,right)=>{//合并数组letresult=[]//使用shift()方法偷懒,删除第一个元素,返回值while(left.length&&right.length){if(left[0]<=right[0]){result.push(left.shift())}else{result.push(right.shift())}}while(left.length){result.push(left.shift())}while(right.length){result.push(right.shift())}returnresult}letmergeSort=function(arr){if(arr.length<=1)returnarrletmid=数学。floor(arr.length/2)//拆分数组letleft=arr.slice(0,mid),right=arr.slice(mid);letmergeLeftArray=mergeSort(left),mergeRightArray=mergeSort(right)returnmerge(mergeLeftArray,mergeRightArray)}letarr=[2,9,6,7,4,3,1,7,0,-1,-2]console.log(mergeSort(arr))插入排序顾名思义:通过构造有序序列,对于未排序的数据,在排序好的序列中从后向前扫描,找到对应的位置插入。“时间复杂度:O(n*n)”思想从第一个元素开始,可以认为已经排序;取出下一个元素,在排序好的元素序列中从后往前扫描;如果元素(已排序)大于新元素,则将元素移动到下一个位置;重复步骤3,直到找到排序元素小于等于新元素的位置;重复步骤2~5。代码实现letinsertionSort=function(arr){letlen=arr.lengthfor(leti=0;i=0&&arr[preIndex]>cur){arr[preIndex+1]=arr[preIndex]preIndex--;}arr[preIndex+1]=cur}returnarr}letarr=[2,9,6,7,4,3,1,7,0,-1,-2]console.log(insertionSort(arr))选择排序思路:每次从待排序的数组元素中选择最大(最小)的元素作为第一个元素,直到排完为止”时间复杂度O(n*n)》思路1、有n个数,需要排序n-1次。2.第一次选择最小值,放在第一位。3.第二次选择最小值,放在第二位。4.…..重复过程5.第n-1次选择最小值,放在第n-1次代码中实现letselectSort=function(arr,flag=0){letlen=arr.length,temp=0;//总共Sortlen-1次for(leti=0;i