快速排序:git
//快速排序 var quickSort = function(arr) { if (arr.length <= 1) { return arr; } var pivotIndex = Math.floor(arr.length / 2); //基准位置(理论上可任意选取) var pivot = arr.splice(pivotIndex, 1)[0]; //基准数 var left = []; var 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)); //连接左数组、基准数构成的数组、右数组 };
选择排序:github
//选择排序 function selectionSort(arr) { var len = arr.length; var minIndex, temp; for (var i = 0; i < len - 1; i++) { minIndex = i; for (var j = i + 1; j < len; j++) { if (arr[j] < arr[minIndex]) { // 寻找最小的数 minIndex = j; // 将最小数的索引保存 } } temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } return arr; }
希尔排序:算法
//希尔排序 function shellSort(arr) { var len = arr.length, temp, gap = 1; while(gap < len/3) { //动态定义间隔序列 gap = gap*3+1; } for (gap; gap > 0; gap = Math.floor(gap/3)) { for (var i = gap; i < len; i++) { temp = arr[i]; for (var j = i-gap; j >= 0 && arr[j] > temp; j -= gap) { arr[j+gap] = arr[j]; } arr[j+gap] = temp; } } return arr; }
冒泡排序:shell
//冒泡排序 function bubbleSort(arr){ var temp,swap; for(i=0;i<arr.length-1;i++){ swap=false; for(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; swap=true; } } if(!swap){ break; } } return arr; }
2.1堆栈*、队列、链表
数组:pop()/push()/shift()/unshift(),自己具备堆栈和队列的特色。
堆栈,队列,链表
2.2递归*(60%)
递归
2.3波兰式和逆波兰式
理论,源码segmentfault