javascript实现快速排序算法

Posted sanxiandoupi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript实现快速排序算法相关的知识,希望对你有一定的参考价值。

忘记了快速排序的思路是怎样的了,复习一下,写了两个实例,发表博文备忘。

对于快速排序的思想,可以参考白话经典算法系列之六 快速排序 快速搞定,讲得比较通俗

prototype扩展的方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
* 对Array对象的原型扩展来实现快速排序
* @param [left] 排序开始位置
* @param [right] 排序结束位置
* @returns {Array}
*/
Array.prototype.quickSort = function(left, right){
if(left === undefined) left = 0; //若left和right为空,设置初始值
if(right === undefined) right = this.length - 1;
if(left < right){
var ref = this[left];
var low = left;
var high = right;
while(low < high){
//从右往左查询比ref小的值
while(low < high && this[high] > ref){
--high;
}
this[low] = this[high];
//从左往右查询比ref大的值
while(low < high && this[low] < ref){
++low
}
this[high] = this[low];
}
this[low] = ref;
this.quickSort(low+1, right);
this.quickSort(left, low-1);
}
return this;
};

var arr1 = [95,8,65,98,54,25,3,654,4,74,63,88,35,68];
console.log(arr1.quickSort());

非prototype方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
* @param array //要排序的数组
* @returns {Array} //排完序的数组
*/
var quicksort = function(array){
if(!array.length) return array;
var low = 0;
var high = array.length - 1;
var ref = array[low];
while(low < high){
while(low < high && array[high] > ref){
--high;
}
array[low] = array[high];
while(low < high && array[low] < ref){
++low
}
array[high] = array[low];
}
array[low] = ref;
return quicksort(array.slice(0,low)).concat([ref],quicksort(array.slice(low+1, array.length)));
};

var arr2 = [95,8,65,98,54,25,3,654,4,74,63,88,35,68];
console.log(quicksort(arr2));

原文:大专栏  javascript实现快速排序算法


以上是关于javascript实现快速排序算法的主要内容,如果未能解决你的问题,请参考以下文章

2.排序算法实现(JavaScript版)-冒泡-选择-快速排序

JavaScript实现快速排序算法

javascript实现快速排序算法

10种经典排序算法的JavaScript实现方法

快速排序算法的 JavaScript 实现

排序算法:图解快速排序算法--附带基于Python和JavaScript的实现