| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 | 
							
- /*
 
- * Licensed to the Apache Software Foundation (ASF) under one
 
- * or more contributor license agreements.  See the NOTICE file
 
- * distributed with this work for additional information
 
- * regarding copyright ownership.  The ASF licenses this file
 
- * to you under the Apache License, Version 2.0 (the
 
- * "License"); you may not use this file except in compliance
 
- * with the License.  You may obtain a copy of the License at
 
- *
 
- *   http://www.apache.org/licenses/LICENSE-2.0
 
- *
 
- * Unless required by applicable law or agreed to in writing,
 
- * software distributed under the License is distributed on an
 
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 
- * KIND, either express or implied.  See the License for the
 
- * specific language governing permissions and limitations
 
- * under the License.
 
- */
 
- /*
 
- * Licensed to the Apache Software Foundation (ASF) under one
 
- * or more contributor license agreements.  See the NOTICE file
 
- * distributed with this work for additional information
 
- * regarding copyright ownership.  The ASF licenses this file
 
- * to you under the Apache License, Version 2.0 (the
 
- * "License"); you may not use this file except in compliance
 
- * with the License.  You may obtain a copy of the License at
 
- *
 
- *   http://www.apache.org/licenses/LICENSE-2.0
 
- *
 
- * Unless required by applicable law or agreed to in writing,
 
- * software distributed under the License is distributed on an
 
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 
- * KIND, either express or implied.  See the License for the
 
- * specific language governing permissions and limitations
 
- * under the License.
 
- */
 
- /**
 
-  * Quick select n-th element in an array.
 
-  *
 
-  * Note: it will change the elements placement in array.
 
-  */
 
- function defaultCompareFunc(a, b) {
 
-   return a - b;
 
- }
 
- function swapElement(arr, idx0, idx1) {
 
-   var tmp = arr[idx0];
 
-   arr[idx0] = arr[idx1];
 
-   arr[idx1] = tmp;
 
- }
 
- function select(arr, left, right, nth, compareFunc) {
 
-   var pivotIdx = left;
 
-   var pivotValue;
 
-   while (right > left) {
 
-     pivotIdx = Math.round((right + left) / 2);
 
-     pivotValue = arr[pivotIdx]; // Swap pivot to the end
 
-     swapElement(arr, pivotIdx, right);
 
-     pivotIdx = left;
 
-     for (var i = left; i <= right - 1; i++) {
 
-       if (compareFunc(pivotValue, arr[i]) >= 0) {
 
-         swapElement(arr, i, pivotIdx);
 
-         pivotIdx++;
 
-       }
 
-     }
 
-     swapElement(arr, right, pivotIdx);
 
-     if (pivotIdx === nth) {
 
-       return pivotIdx;
 
-     } else if (pivotIdx < nth) {
 
-       left = pivotIdx + 1;
 
-     } else {
 
-       right = pivotIdx - 1;
 
-     }
 
-   } // Left == right
 
-   return left;
 
- }
 
- /**
 
-  * @alias module:echarts/core/quickSelect
 
-  * @param {Array} arr
 
-  * @param {number} [left]
 
-  * @param {number} [right]
 
-  * @param {number} nth
 
-  * @param {Function} [compareFunc]
 
-  * @example
 
-  *     var quickSelect = require('echarts/core/quickSelect');
 
-  *     var arr = [5, 2, 1, 4, 3]
 
-  *     quickSelect(arr, 3);
 
-  *     quickSelect(arr, 0, 3, 1, function (a, b) {return a - b});
 
-  *
 
-  * @return {number}
 
-  */
 
- function _default(arr, left, right, nth, compareFunc) {
 
-   if (arguments.length <= 3) {
 
-     nth = left;
 
-     if (arguments.length === 2) {
 
-       compareFunc = defaultCompareFunc;
 
-     } else {
 
-       compareFunc = right;
 
-     }
 
-     left = 0;
 
-     right = arr.length - 1;
 
-   }
 
-   return select(arr, left, right, nth, compareFunc);
 
- }
 
- module.exports = _default;
 
 
  |