一.快速排序的重要性
1.快速排序几乎可以说是目前所有排序算法中,最快的一种排序算法。
当然,没有任何一种算法是在任何情况下都是最优的。
比如 希尔排序 确实在某些情况下可能好于快速排序。
但是大多数情况下,快速排序还是比较好的选择
2.快速排序被列为20世纪十大算法之一
二.什么是快速排序
三.快速排序过程图解
四.快速排序中枢纽(pivot)的选择
取 头 中 尾 三个数的中位数 作为枢纽
五.代码实现
//交换方法
ArrayList.prototype.swap = function (i, j) {
var temp = this.array[i];
this.array[i] = this.array[j];
tjhis.array[j] = temp;
};
//定义一个寻找枢纽的方法
ArrayList.prototype.median = function (left, right) {
var center = Math.floor((left + right) / 2);
// 1.将找到的首, 中, 尾三个位置的数字按有小到大排序
if (this.array[left] > this.array[center]) {
this.swap(left, center);
}
if (this.array[center] > this.array[right]) {
this.swap(center, right);
}
if (this.array[left] > this.array[center]) {
this.swap(left, center);
}
// 2.把找到的枢纽,即中间位置的数,放到倒数第二个数的位置
this.swap(center, right - 1);
};
//快速排序
ArrayList.prototype.quickSort = function () {
this.quick(0, this.array.length - 1);
};
//定义递归哈函数
ArrayList.prototype.quick = function (left, right) {
//递归出口
if (left >= right) return;
//找到枢纽
var pivot = this.median(left, right);
//进行交换操作
var i = left;
var j = right - 1;
while (true) {
while (this.array[++i] < pivot) {}
while (this.array[--j] > pivot) {}
if (left < right) {
this.swap(i, j);
} else {
break;
}
}
//把枢纽放到属于他的位置
this.swap(i, right - 1);
//利用分治思想
this.quick(left, i - 1);
rhis.quick(i + 1, right);
};
六.效率分析: