原理:(1)在数据集之中,选择一个元素作为“基准”(pivot)。
(2)所有小于“基准”的元素,都移到“基准”的左边;所有大于“基准”的元素,都移到“基准”的右边。
(3)对“基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
代码实现:
1 function quickSort(arr) { 2 3 // 这步判断很重要,因为递归,每次分治时都要判断 4 // 并且不能将arr.length缓存成变量len,因为取pivot的时候用splice会把数组长度减1 5 if (arr.length <= 1) return arr; 6 7 var mid = Math.floor(arr.length / 2), // 取得中间元素的索引 8 pivot = arr.splice(mid, 1)[0], // 以中间元素为基准元素,arr.splice()返回数组 9 left = [], // 用于存放比pivot小的元素 10 right = []; // 用于存放个比pivot大的元素 11 12 for (var i=0; i<arr.length; i++) { 13 if (arr[i] < pivot) { 14 left.push(arr[i]); 15 } else { 16 right.push(arr[i]); 17 } 18 } 19 20 return quickSort(left).concat([pivot], quickSort(right)); 21 }