快速排序: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