几个基本的前端排序方法
学习一下几个日常的算法排序问题
1. 冒泡排序
实现:用for循环遍历数组元素,拿出前一个和后一个元素对比,如果前边的值大于后边的值就交换位置,遍历元素进行排序。
图片应该看起来更清晰:
var arr = [89,12,8,14,23,45,9,15,33]; function bubble_sort(arr){ var len = arr.length; if(arr.length ==1) { return } for(var i = 0; i < len; i++) { for(var j = 0; j < len-1; j++) { //如果前一个值比后一个值大,那么交换位置 if(arr[j] > arr[j+1]) { var temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } return arr; } //测试一下代码 bubble_sort(arr); //log [8, 9, 12, 14, 15, 23, 33, 45, 89]
2.快速排序
算法实现:
1.在数据集之中,选择一个元素作为”基准”(pivot)。
2.所有小于”基准”的元素,都移到”基准”的左边;所有大于”基准”的元素,都移到”基准”的右边。这个操作称为分区 (partition)操作,分区操作结束后,基准元素所处的位置就是最终排序后它的位置。
3.对”基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
图示:
function quickSort(arr){ //如果数组<=1,则直接返回 if(arr.length<=1){return arr;} var pivotIndex=Math.floor(arr.length/2); //找基准,并把基准从原数组删除 var pivot=arr.splice(pivotIndex,1)[0]; //定义左右数组 var left=[]; var right=[]; //比基准小的放在left,比基准大的放在right for(var i=0;i<arr.length;i++){ if(arr[i]<=pivot){ left.push(arr[i]); } else{ right.push(arr[i]); } } //递归 return quickSort(left).concat([pivot],quickSort(right)); }
.选择排序
算法实现思路:
选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理如下,首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
function selectionSort(array) { var length = array.length, i, j, minIndex, minValue, temp; for (i = 0; i < length - 1; i++) { minIndex = i; minValue = array[minIndex]; for (j = i + 1; j < length; j++) { if (array[j] < minValue) { minIndex = j; minValue = array[minIndex]; } } // 交换位置 temp = array[i]; array[i] = minValue; array[minIndex] = temp; } return array }