方式一:理解简单,但是因为在递归时,会呈倍数的创建变量
(基准值取数组第一个数)
function quickSort(arr){ if(arr.length <= 1){ return arr; } var leftArr = []; var rightArr = []; var cankao = arr.splice(0,1); for(var i=0; i<arr.length; i++){ if(arr[i]>cankao[0]){ rightArr.push(arr[i]); }else{ leftArr.push(arr[i]); } } return quickSort(leftArr).concat(cankao[0],quickSort(rightArr)); } var arr1 = [2,3,1,9,2,6,3,1,3]; console.log(quickSort(arr1));
方式二:实用版,性能比方式一实现更优
function sort(arr, left, right) { if(left >= right) { return ; } var i = left; var j = right; var key = arr[left]; while(i < j) { while(i < j && key <= arr[j]) { j--; } arr[i] = arr[j]; while(i < j && key >= arr[i]) { i++; } arr[j] = arr[i]; } arr[i] = key; sort(arr, left, i - 1); sort(arr, i + 1, right); } var Arr = [1,7,2,7,3,1,4,2]; sort(Arr,0,7) console.log(Arr);