几种常见的排序算法,手写
参考回答:
冒泡排序:
function bubbleSort(data){ var temp=0; for(var i=data.length;i>0;i--){ for(var j=0;j<i-1;j++){ if(data[j]>data[j+1]) { temp=data[j]; data[j]=data[j+1]; data[j+1]=temp; } } } return data; }
选择排序:
function selectionSort(data){ for(var i=0;i<data.length;i++){ var min=data[i]; var temp; var index=1; for(var j=i+1;j<data.length;j++){ if(data[j]<min) { temp=data[j]; data[j]=min; min=temp; } } temp=data[i]; data[i]=min; data[index]=temp } }
插入排序:
function insertSort(data){ var len=data.length; for(var i=0;i<len;i++){ var key=data[i]; var j=i-1; while(j>=0&&data[j]>key){ data[j+1]=data[i]; j--; } data[j+1]=key; } return data; }
希尔排序:
function shallSort(array) { var increment = array.length; var i
var temp; //暂存
do {
//设置增量
increment = Math.floor(increment / 3) + 1; for (i = increment ; i < array.length; i++) { if ( array[i] < array[i - increment]) { temp = array[i]; for (var j = i - increment; j >= 0 && temp < array[j]; j -= increment) { array[j + increment] = array[j]; } array[j + increment] = temp; } } } while (increment > 1) return array; }
归并排序:
function mergeSort ( array ) { var len = array.length; if( len < 2 ){ return array; } var middle = Math.floor(len / 2), left = array.slice(0, middle), right = array.slice(middle); return merge(mergeSort(left), mergeSort(right)); } function merge(left, right) { var result = []; while (left.length && right.length) { if (left[0] <= right[0]) { result.push(left.shift()); } else { result.push(right.shift()); } } while (left.length) result.push(left.shift()); while (right.length) result.push(right.shift()); return result; }
快速排序
function quickSort(arr){ if(arr.length==0) return []; var left=[]; var right=[]; var pivot=arr[0]; 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)); }