快速排序主要分三部分:1、選出一個基準(pivot) 2、所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數字可以到任一邊)。在這個分區退出之後,該基準就處於數列的中間位置。這個稱為分區(partition)操作;3、遞歸地(recursive)將小於基準值元素的子數列和大於基準值元素的子數列排序;遞歸的最底部情形,是數列的大小是零或一,也就是永遠都已經被排序了。雖然一直遞歸下去,但這個演算法總是會退出,因為在每次的迭代(iteration)中,它至少會把一個元素擺到它最後的位置去。
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))
相關推薦:
以上是Js快速排序方法實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!