1、快排的思想
选定一个基准元素,通过与基准元素的比较和交换,把待排序序列分为**小于基准元素的区域**和**大于或等于基准元素的区域**。(意思个人理解是切成两边,左边的值一定都是小于,右边的值大于或等于)。
2、代码:
var dataArray = [5, 2, 5, 2,70, 6, 4, 44, 5, 6];
function quickSort1(data, left, right) {
if (left > right) {
return;
}
var i = left;
var j = right;
var key = data[left];
while (true) {
// 先从右边找小值
while (i < j && data[j] >= key) {
j--;
}
data[i] = data[j];
// while (i < j && data[i] < key) {
// 加上等于号的判断
while (i < j && data[i] <= key) {
i++;
}
data[j] = data[i];
if (i === j) {
data[i] = key;
break;
}
}
// quickSort1(dataArray, left, i - 1);
// quickSort1(dataArray, i + 1, right);
}
console.log(dataArray);
quickSort1(dataArray, 0, dataArray.length - 1);
console.log(dataArray);
3、网上有些代码它在做左边找“大值”的时候,相等的会放过去,使得第一次排序的结果如下,它的左边会出现不小于"5"的出现。这样是不是不太符合,它思想的定义的???
4、不加等于号,它就完全符合思想。虽然结果都是正确的,能不能认为“不加等于号”,会更好点???
快速排序是分成两边,分而治之的思想,并没有规定以哪个为阈值,哪边去等于阈值,这也不重要。它是一种思想,思想并不能左右代码必须如何去实现