理解:把比这个数小的放在这个数左边,比这个数大的放在这个数右边,一样大的和这个数放在一起,最后,左右两边各自重复上述过程
var array = [1, 45, 4, 3, 6, 46, 7]; quickSort(array); function quickSort(array) { var i = 0; var j = array.length - 1; var Sort = function(i, j) { // 结束条件 if (i == j) { return }; var key = array[i]; var stepi = i; // 记录开始位置 var stepj = j; // 记录结束位置 while (j > i) { // j <<-------------- 向前查找 if (array[j] >= key) { j--; } else { array[i] = array[j] //i++ ------------>>向后查找 while (j > ++i) { if (array[i] > key) { array[j] = array[i]; break; } } // 最后一个空位留给 key array[i] = key; } } // 如果第一个取出的 key 是最小的数 if (stepi == i) { Sort(++i, stepj); return; } // 递归 Sort(stepi, i); Sort(j, stepj); } Sort(i, j); return array; }以下是个人理解,可能有问题,希望发现问题的大神能留言批评指正 1, 45, 4, 3, 6, 46, 7 第一步:sort(0,6) 1是所有里面最小的,所以第一次执行sort后,数组没有变化. 第二步:sort(1,6) 1, 45, 4, 3, 6, 46, 7 (45和7比较),将7与45换位置 1, 7, 4, 3, 6, 46, 45 然后(4与45比较) 1, 7, 4, 3, 6, 46, 45 然后(3与45比较) 1, 7, 4, 3, 6, 46, 45 然后(6与45比较) 1, 7, 4, 3, 6, 45, 46 然后(46与45比较)45与46换位置。此时45左边都比45小,右边都比45大 第三步:sort(1,4) 1, 7, 4, 3, 6
每次取当前值前面的一个进行对比,如果比当前值大则两个数兑换位置。以此类推。