퀵 정렬은 크게 세 부분으로 나누어집니다. 1. 피벗(pivot) 선택 2. 피벗 값보다 작은 요소는 모두 피벗 앞에 배치되고, 피벗 값보다 큰 요소는 모두 피벗 뒤에 배치됩니다. 피벗(동일한 숫자는 양쪽으로 갈 수 있음). 이 파티션이 종료된 후 베이스는 시퀀스의 중간에 있습니다. 3. 기본 값보다 작은 요소의 하위 배열과 기본 값보다 큰 요소의 하위 배열을 재귀적으로 정렬하는 경우는 배열의 크기가 0 또는 1인 경우입니다. , 항상 정렬되어 있다는 것뿐입니다. 계속 반복되지만 이 알고리즘은 항상 종료됩니다. 왜냐하면 각 반복에서 최소한 하나의 요소를 최종 위치로 이동하기 때문입니다.
function quickSort(arr) { if (arr.length <= 1) { return arr } console.log("原数组是:" + arr) var pivotIndex = Math.floor(arr.length / 2) var pivot = arr.splice(pivotIndex, 1)[0] var left = [] var right = [] console.log("将中介提取出来后数组是:" + arr) for (var i = 0 ; i < arr.length ; i++){ console.log("此刻中介是:" + pivot + "当前元素是:" + arr[i]) if (arr[i] < pivot) { left.push(arr[i]) console.log("移动" + arr[i] + "到左边") } else { right.push(arr[i]) console.log("移动" + arr[i] + "到右边") } } return quickSort(left).concat([pivot], quickSort(right)) } var nums = [2,3,4,3,1,5,7,122,341,-1] console.log(quickSort(nums))
두 번째 방법:
function quickSort(arr) { if (arr.length <= 1) { return arr } console.log("原数组是:" + arr) var pivotIndex = Math.floor(arr.length / 2) var pivot = arr.splice(pivotIndex, 1)[0] var left = [] var right = [] console.log("将中介提取出来后数组是:" + arr) for (var i = 0 ; i < arr.length ; i++){ console.log("此刻中介是:" + pivot + "当前元素是:" + arr[i]) if (arr[i] < pivot) { left.push(arr[i]) console.log("移动" + arr[i] + "到左边") } else { right.push(arr[i]) console.log("移动" + arr[i] + "到右边") } } return quickSort(left).concat([pivot], quickSort(right)) } var nums = [2,3,4,3,1,5,7,122,341,-1] console.log(quickSort(nums))
관련 권장 사항:
2차원 배열 빠른 정렬 알고리즘을 구현하는 PHP의 예
위 내용은 Js 빠른 정렬 방법 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!