前言
最近阮老师的快速排序算法被怼了。。。我之前看过觉得挺不错的,简单易懂,一直拿来作为自己的快速排序方法。
快排
赶紧实现一下
// 交换函数
function swap(myArray, p1, p2) {
var temp = myArray[p1];
myArray[p1] = myArray[p2];
myArray[p2] = temp;
}
function position(myArray, left, right){
var pivot = myArray[right]; // 以最右边的数为基准进行排序,小的放左边,大的放右边
var tail = left - 1;
for(var i = left; i < right; i++) {
if(myArray[i] < pivot) {
tail++;
swap(myArray, tail, i);
}
}
swap(myArray, tail+1, right);
return tail+1;
}
function quickSort(myArray, left, right) {
if(myArray.length < 2){
return myArray;
}
// 如果函数没有输入left和right值
left = (typeof left !== "number" ? 0 : left);
right = (typeof right !== "number" ? myArray.length-1 : right);
var index = position(myArray, left, right);
if(left < index - 1) {
quickSort(myArray, left, index - 1);
}
if(index < right) {
quickSort(myArray, index + 1, right);
}
return myArray;
}
测试一下:
var arr = [];
// 生成随机整数
function random(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
// 生成len长度的随机数组
function generateArr(len) {
for (var i = 0; i < len; i++) {
arr.push(random(1, len));
}
}
generateArr(10000000);
console.time('xm');
quickSort(arr);
console.timeEnd('xm'); // xm: 1633.260986328125ms