1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
function quickSort(list){ quickSortHelper(list, 0, list.length - 1) }
function quickSortHelper(list, first, last){ if(first < last){ let splitPoint = partition(list, first, last) quickSortHelper(list, first, splitPoint-1) quickSortHelper(list, splitPoint+1, last) } }
function partition(list, first, last){ let pivotValue = list[first] let leftMark = first + 1 let rightMark = last let done = false while(!done){ while (leftMark <= rightMark && list[leftMark] <= pivotValue){ leftMark += 1 } while(leftMark <= rightMark && list[rightMark] >= pivotValue){ rightMark -= 1 } if(leftMark > rightMark){ done = true }else{ let cur = list[leftMark] list[leftMark] = list[rightMark] list[rightMark] = cur } } list[first] = list[rightMark] list[rightMark] = pivotValue return rightMark }
let arr = [3, 14, 6, 4, 8, 7, 25, 9, 0, 12, 13, 24,10, 17] quickSort(arr)
console.log("arr:", arr)
|