function fn(arr) {
// 1.
this.arr = arr;
}
fn.prototype.swap = function (m, n) {
var temp = this.arr[m]
this.arr[m] = this.arr[n]
this.arr[n] = temp
}
fn.prototype.quickSort = function () {
this.quick(0, this.arr.length - 1)
}
fn.prototype.quick = function (left, right) {
if (left >= right) { return }
// 2.获取中间数
var mid = this.medain(left, right)
// 3.定义变量,用于记录当前找到的位置
var i = left
var j = right - 1
while (true) {
while (this.arr[++i] < mid) { }
while (this.arr[--j] > mid) { }
if (i < j) {
this.swap(i,j)
} else {
break;
}
}
if (i < right) {
this.swap(i, right - 1)
}
//递归
this.quick( left, i - 1)
this.quick( i + 1, right);
}
// 获取枢纽
fn.prototype.medain = function (i, j) {
var center = Math.floor((i + j) / 2);
if (this.arr[i] > this.arr[center]) {
this.swap(i,center)
}
if (this.arr[i] > this.arr[j]) {
this.swap(i,j)
}
if (this.arr[center] > this.arr[j]) {
this.swap(center,j)
}
// 把中间数放到倒数第二的位置
this.swap(center ,j-1);
return this.arr[j-1]
}
// 快速排序法 测试代码
var arr = [2, 4, 1, 8, 5, 3, 11];
var sort = new fn(arr)
//
alert(sort.arr);
sort.quickSort();
alert(sort.arr);
js实现快速排序法,其平均时间复杂度为O(nlogn)
最新推荐文章于 2022-07-20 14:30:58 发布