数组排序的算法有很多,其中冒泡算法比较简单。冒泡的基本原理是比较相邻的两个数,按照排序条件进行交换,比如将值从小到大排序。交换,最大值会慢慢冒泡到数组的末尾。基于这个原理,我们可以写出冒泡排序。为了简单起见,下面的例子都是将数值数组从小到大排序,先模拟一个20字符的数组函数getRandomArr(n){letarr=[];for(leti=0;i0){for(letj=0;jarr[j+1]){temp=arr[j];arr[j]=arr[j+1];arr[j+1]=温度;}}i--;//不断缩小范围}returnarr;}console.log(randomArr)//[93,72,29,17,82,26,56,71,35,48,37,42,3,11,33,66,81,53,59,53]console.log('bubbleSort',bubbleSort(randomArr.concat()));//bubbleSort[3,11,17,26,29,33,35,37,42,48,53,53,56,59,66,71,72,81,82,93]在冒泡的过程中,我们可以发现如果数组后面的部分已经排序了,就是当不需要交换双方的位置时,只要记录上次交换的位置,就很有可能缩小下一个周期的范围,可以提高冒泡的表现(这个只是猜测)第二个冒泡算法函数bubbleSort2(arr){letlen=arr.length;让我=len-1;让温度;letpos;//while(i>0){pos=0记录位置;//初始为0如果数组一开始就已经排序好了,那么可以快速终止冒泡for(letj=0;jarr[j+1]){pos=j;温度=arr[j];arr[j]=arr[j+1];arr[j+1]=温度;}}我=位置;}returnarr;}console.log(randomArr)//[47,31,85,65,44,56,54,5,67,44,76,13,90,12,83,72,2,69,58,60]console.log('bubbleSort2',bubbleSort2(randomArr.concat()));//bubbleSort2[2,5,12,13,31,44,44,47,54,56,58,60,65,67,69,72,76,83,85,90]其实对于第一种循环来说,就是从左到右冒泡,我们也可以从右到左冒泡,但是从右到左的方法和第一种基本一样,但是我们可以在内循环中实现先向左冒泡,再向右冒泡。第三个冒泡方法functionbubbleSort3(arr){letlen=arr.length;让低=0;让高=len-1;让温度;while(lowarr[j+1]){temp=arr[j];arr[j]=arr[j+1];arr[j+1]=温度;}}高的-;for(letj=high;j>low;j--){if(arr[j]arr[j+1]){hpos=j;温度=arr[j];arr[j]=arr[j+1];arr[j+1]=温度;}}高度=hPos;r(letj=high;j>low;j--){if(arr[j]