您的位置:首页 > 产品设计 > UI/UE

js算法: quick sort 快速排序

2016-06-29 14:55 429 查看
'use strict';

//快速排序

//大致逻辑
/**
* quickSort(A, from, to) {
*   p = partion(A, from, to);  //获取分隔点
*   if (from < to) {
*      quickSort(A, from, p-1);  //递归分隔左边
*      quickSort(A, p+1, to);    //递归分隔右边
*   }
* }
**/

function partion(arr, from, to) {
//选择一个比较数,暂且使用 arr[to]
//比arr[to]小的放到拆分点左边
//比arr[to'大的放到拆分点右边
var partDot = from - 1;
if (from < to) {
let tmpData;  //临时存储变量
var cmpBase = arr[to];  //用于分隔的数
for(let i= from; i< to; i++) {
if (arr[i] <= cmpBase) {
partDot = partDot + 1;
//交换
tmpData = arr[partDot]
arr[partDot] = arr[i]
arr[i] = tmpData;
}
}

partDot = partDot + 1;
tmpData = arr[partDot];
arr[partDot] = arr[to];
arr[to] = tmpData;
}
return partDot;
}

function quickSort(arr, from, to) {
let p = partion(arr, from, to);
if (from < to) {
quickSort(arr, from, p-1);
quickSort(arr, p+1, to);
}
}

///////////辅助函数//////////////////

//随机获取一个数组
function randNum() {
return parseInt(Math.random() * 100);
}

function getRandArr(length) {
var arr = [];
for(var i=0; i<length; i++) {
arr.push(randNum());
}
return arr;
}

var arr = getRandArr(10);

quickSort(arr, 0, arr.length-1);
console.info(arr);

//原数组: [ 70, 79, 69, 9, 74, 29, 43, 38, 15, 81 ]
//排序后 [ 9, 15, 29, 38, 43, 69, 70, 74, 79, 81 ]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息