系统整理一下排序算法。
冒泡排序实质是小(大)的元素往前(后)调。进行n-1轮对比,每轮对比将最后一个元素进行冒泡(排序),即每轮对比将最后一个元素排出(每轮中的最大或最小),随后将泡泡(排出元素)排除,进行下一次迭代对比,直到没有元素可交换为止。这种方式通过多次迭代数组来完成操作,不管是平均还是最坏的情况,都是具有二次时间复杂度。尽管这个方式简单,但是在实际应用中,大多数情况下不切实际的:时间复杂度过高。
js实现 :
function bubbleSort(arr){ for(let i=0;i<arr.length-1;i++){ for(let j=0;j<arr.length-1-i;j++){ if (arr[j]>arr[j+1]) { var temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } return arr; } console.log(bubbleSort([5,12,3,77,2])); //2, 3, 5, 12, 77选择排序的工作原理是将第一个元素当成最小(最大)的元素,将其与剩余的元素进行对比,将最终对比出来的最大(最小)值保存在第一位,接着继续将第二个元素当成最小(最大)元素,周而复始,同样进行n-1轮对比。由于交换所需CPU时间比比较所需的CPU时间多,n值较小时,选择排序比冒泡排序快。是一种不稳定的排序方法。
js代码
function selectSort(arr){ for(let i=0;i<arr.length-1;i++){ let smallnum=i; for(let j=i+1;j<arr.length;j++){ if (arr[smallnum]>arr[j]) { var temp =arr[j]; arr[j]=arr[smallnum]; arr[smallnum]=temp; } } } return arr; } console.log(selectSort([5,12,3,77,2]));//2, 3, 5, 12, 77插入排序的工作原理是先将第一个元素当成已排序好的序列,将第二个元素插入前面序列进行对比排序,之后又将第三个元素插入前面已排序好的序列,周而复始。对于少量元素的排序,它是一个有效的算法。
js代码
function insertSort(arr){ for(let i=1;i<arr.length;i++){ for(let j=0;j<i;j++){ if (arr[i]<arr[j]) { var temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } return arr; } console.log(insertSort([5,12,3,77,2]));//2, 3, 5, 12, 77快速排序的原理是选中一个枢纽值,通过对比枢纽值,将比枢纽值小的数放在其前面,大的数组放在其后面。将数组分成两部分,再通过递归逐步缩小范围,最终得到排序后的数组。快速排序是一种非常有效的排序方式,平均时间复杂度为O(nlog(n)),同时它也是相对比较容易实现的方式。这些特性使得快速排序成为了一种流行而有用的排序方式。
js代码
function swap(arr,a,b){ let temp=arr[a]; arr[a]=arr[b]; arr[b]=temp; } function quickSort(arr,left=0,right=arr.length-1){//给定默认值使第一次调用是原始数据 if (right>left) { let pivot=left;//设置一个枢纽值,用来指定最小和最大之间的下标,每次交换都递增1 for(let i=left+1;i<=right;i++){ if (arr[left]>arr[i]) { swap(arr,i,++pivot); } } swap(arr,left,pivot); quickSort(arr,0,pivot-1); quickSort(arr,pivot+1,right); } return arr; } console.log(quickSort([5,12,3,77,2]));//2, 3, 5, 12, 77