企业网站程序下载,邯郸网站建设多少钱,网站首页内链怎么做,网站建设中的端口一、原生数组排序方法
1. Array.prototype.sort()
javascript
// 默认排序#xff08;按字符串Unicode码点#xff09;
arr.sort()// 自定义比较函数
arr.sort((a, b) a - b) // 数字升序 时间复杂度#xff1a; V8引擎#xff1a;使用Timsort#xff08;归并插入…一、原生数组排序方法1.Array.prototype.sort()javascript// 默认排序按字符串Unicode码点 arr.sort() // 自定义比较函数 arr.sort((a, b) a - b) // 数字升序时间复杂度V8引擎使用Timsort归并插入平均/最坏情况O(n log n)最佳情况O(n)空间复杂度O(n)稳定排序需要额外空间特点稳定排序适合大多数场景二、经典排序算法实现2.快速排序javascriptfunction quickSort(arr) { if (arr.length 1) return arr; const pivot arr[Math.floor(arr.length / 2)]; const left arr.filter(x x pivot); const middle arr.filter(x x pivot); const right arr.filter(x x pivot); return quickSort(left).concat(middle, quickSort(right)); }平均时间复杂度O(n log n)最坏情况O(n²)已排序数组空间复杂度O(log n) ~ O(n)特点原地排序不稳定3.归并排序javascriptfunction mergeSort(arr) { if (arr.length 1) return arr; const mid Math.floor(arr.length / 2); return merge(mergeSort(arr.slice(0, mid)), mergeSort(arr.slice(mid))); }时间复杂度O(n log n)空间复杂度O(n)特点稳定排序适合链表4.堆排序javascriptfunction heapSort(arr) { // 建堆 for (let i Math.floor(arr.length / 2) - 1; i 0; i--) { heapify(arr, arr.length, i); } // 排序 for (let i arr.length - 1; i 0; i--) { [arr[0], arr[i]] [arr[i], arr[0]]; heapify(arr, i, 0); } return arr; }时间复杂度O(n log n)空间复杂度O(1)特点原地排序不稳定三、简单但低效的排序5.冒泡排序javascriptfunction bubbleSort(arr) { for (let i 0; i arr.length; i) { for (let j 0; j arr.length - i - 1; j) { if (arr[j] arr[j 1]) { [arr[j], arr[j 1]] [arr[j 1], arr[j]]; } } } return arr; }时间复杂度O(n²)特点实现简单适合教学6.插入排序javascriptfunction insertionSort(arr) { for (let i 1; i arr.length; i) { let key arr[i]; let j i - 1; while (j 0 arr[j] key) { arr[j 1] arr[j]; j--; } arr[j 1] key; } return arr; }最佳情况O(n)已排序最坏情况O(n²)特点对小数组或基本有序数组高效四、性能对比数据以下是在 Chrome 119 中对 10,000 个随机整数的测试结果排序方法平均时间(ms)相对速度原生 sort()1-3最快快速排序5-10≈2-3倍慢归并排序8-15≈3-5倍慢堆排序10-20≈4-7倍慢插入排序150-300≈50-100倍慢冒泡排序400-800≈150-300倍慢五、选择建议1.日常使用javascript// 99% 的场景使用原生 sort arr.sort((a, b) a - b);2.特殊场景小数组 (n 10)插入排序可能更快几乎有序的数据插入排序或冒泡排序内存敏感堆排序原地排序需要稳定性归并排序或 Timsort3.现代 JavaScript 优化javascript// 使用 TypedArray 提高数值排序性能 const float64Array new Float64Array([3, 1, 2]); float64Array.sort(); // 使用高度优化的底层实现 // Web Workers 并行处理大数据 if (window.Worker) { const worker new Worker(sort-worker.js); worker.postMessage(largeArray); }关联阅读推荐TypedArray 详解什么是 TypedArrayTypedArray是 JavaScript 中处理二进制数据的对象它提供了类似数组的视图来访问原始二进制缓冲区中的数据。核心特点类型化每个元素都有固定的数据类型如 Int8、Uint32、Float64 等高性能直接操作内存避免了 JavaScript 对象的开销固定长度创建后长度不可变内存高效数据在内存中连续存储TypedArray 类型类型字节长度数值范围描述Int8Array1-128 ~ 1278位有符号整数Uint8Array10 ~ 2558位无符号整数Uint8ClampedArray10 ~ 2558位无符号整数限制范围Int16Array2-32768 ~ 3276716位有符号整数Uint16Array20 ~ 6553516位无符号整数Int32Array4-2³¹ ~ 2³¹-132位有符号整数Uint32Array40 ~ 2³²-132位无符号整数Float32Array4±1.2×10⁻³⁸ ~ ±3.4×10³⁸32位浮点数Float64Array8±5.0×10⁻³²⁴ ~ ±1.8×10³⁰⁸64位浮点数BigInt64Array8-2⁶³ ~ 2⁶³-164位有符号大整数BigUint64Array80 ~ 2⁶⁴-164位无符号大整数4.实际考虑因素javascript// 根据数据特性选择 function smartSort(arr) { if (arr.length 10) { return insertionSort(arr); } else if (isAlmostSorted(arr)) { return bubbleSort(arr); } else { return arr.sort((a, b) a - b); } }六、最佳实践总结优先使用Array.prototype.sort()- V8 的 Timsort 高度优化避免自己实现排序算法- 除非有特殊需求考虑数据特征- 数据量、有序程度、数据类型使用适当的数据结构- 有时不需要排序用 Map/Set 更高效大数据集考虑分治- 分批排序或使用 Web Workers原生sort()方法在绝大多数情况下都是最佳选择除非你有明确的性能瓶颈和特殊需求。关联阅读推荐JavaScript 原生 sort() 方法详解