98 lines
2.4 KiB
JavaScript
98 lines
2.4 KiB
JavaScript
/**
|
|
*
|
|
* @param {number[]} array - 要操作的数组
|
|
* @param {number} a - 要操作的下标
|
|
* @param {number} b - 要操作的下标
|
|
* @description 交换数组中两个数的位置
|
|
*/
|
|
export function swap(array, a, b) {
|
|
const temp = array[a];
|
|
array[a] = array[b];
|
|
array[b] = temp;
|
|
}
|
|
|
|
/**
|
|
* @param {Array} array - 待操作的数组
|
|
* @returns {number[]} - 打乱后的数组
|
|
* @description 打乱数组内容
|
|
*/
|
|
export function shuffle(arr) {
|
|
// 创建数组的副本,以防止修改原始数组
|
|
const shuffledArray = arr.slice();
|
|
|
|
// Fisher-Yates 洗牌算法
|
|
for (let i = shuffledArray.length - 1; i > 0; i--) {
|
|
const a = Math.random() * (i + 1);
|
|
console.log(a);
|
|
const j = Math.floor(a);
|
|
// 交换元素
|
|
[shuffledArray[i], shuffledArray[j]] = [shuffledArray[j], shuffledArray[i]];
|
|
}
|
|
|
|
return shuffledArray;
|
|
}
|
|
|
|
/**
|
|
* @description 生成指定长度的随机数组。
|
|
*
|
|
* @param {number} len - 数组的长度。
|
|
* @param {boolean} decimal - 是否生成包含小数的随机数,默认为 true。
|
|
* @param {number} decimals - 保留的小数位数,默认为 2。
|
|
* @returns {number[]} - 生成的随机数组。
|
|
*/
|
|
export function generateRandomArray(len, decimal = false, decimals = 2) {
|
|
const randomArray = [];
|
|
|
|
for (let i = 0; i < len; i++) {
|
|
const randomNumber = decimal
|
|
? parseFloat((Math.random() * 10000).toFixed(decimals))
|
|
: Math.floor(Math.random() * 10000);
|
|
|
|
randomArray.push(randomNumber);
|
|
}
|
|
|
|
return randomArray;
|
|
}
|
|
|
|
export function measureTime(func, ...args) {
|
|
// 记录函数开始执行的时间戳
|
|
const startTime = performance.now();
|
|
|
|
// 执行传入的函数,使用 apply 或 call 传入参数
|
|
const result = func(...args);
|
|
|
|
// 计算函数执行所花费的时间
|
|
const endTime = performance.now();
|
|
const elapsedTime = endTime - startTime;
|
|
|
|
// 打印执行时间
|
|
console.log(`Function execution time: ${elapsedTime} milliseconds`);
|
|
return result;
|
|
}
|
|
|
|
export function isSort(arr) {
|
|
const len = arr.length;
|
|
let isInverted = false;
|
|
if (len < 2) {
|
|
return true;
|
|
}
|
|
// 判断数组是否倒序
|
|
if (arr[0] > arr[1]) {
|
|
isInverted = true;
|
|
}
|
|
if (isInverted) {
|
|
for (let i = 0; i < len - 1; i++) {
|
|
if (arr[i] < arr[i + 1]) {
|
|
return false;
|
|
}
|
|
}
|
|
} else {
|
|
for (let i = 0; i < len - 1; i++) {
|
|
if (arr[i] > arr[i + 1]) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|