Archive
This commit is contained in:
15
resources/competitive_analysis/20260326152929.mmd
Normal file
15
resources/competitive_analysis/20260326152929.mmd
Normal file
@@ -0,0 +1,15 @@
|
||||
quadrantChart
|
||||
title "排序库的简洁性与性能对比"
|
||||
x-axis "低性能" --> "高性能"
|
||||
y-axis "复杂" --> "简洁"
|
||||
quadrant-1 "理想选择"
|
||||
quadrant-2 "需要优化"
|
||||
quadrant-3 "不推荐"
|
||||
quadrant-4 "性能优先"
|
||||
"Lodash sortBy": [0.7, 0.4]
|
||||
"Array.prototype.sort": [0.6, 0.8]
|
||||
"bubble-sort-js": [0.2, 0.7]
|
||||
"merge-sort-js": [0.65, 0.45]
|
||||
"timsort": [0.85, 0.25]
|
||||
"fast-sort": [0.75, 0.35]
|
||||
"Our Target Product": [0.75, 0.85]
|
||||
10
resources/data_api_design/20260326152929.mmd
Normal file
10
resources/data_api_design/20260326152929.mmd
Normal file
@@ -0,0 +1,10 @@
|
||||
|
||||
classDiagram
|
||||
class QuickSort {
|
||||
+quickSort(arr: number[], descending: boolean) number[]
|
||||
-partition(arr: number[], descending: boolean) object
|
||||
}
|
||||
class Main {
|
||||
+run() void
|
||||
}
|
||||
Main --> QuickSort : uses
|
||||
77
resources/prd/20260326152929.md
Normal file
77
resources/prd/20260326152929.md
Normal file
@@ -0,0 +1,77 @@
|
||||
## Language
|
||||
|
||||
zh_cn
|
||||
|
||||
## Programming Language
|
||||
|
||||
JavaScript
|
||||
|
||||
## Original Requirements
|
||||
|
||||
一个JS写的数字的快速排序程序,无需UI,尽量简单
|
||||
|
||||
## Project Name
|
||||
|
||||
quick_sort_js
|
||||
|
||||
## Product Goals
|
||||
|
||||
- 实现简洁高效的快速排序算法
|
||||
- 代码易于理解和维护
|
||||
- 确保排序结果的正确性和性能
|
||||
|
||||
## User Stories
|
||||
|
||||
- 作为开发者,我希望能够对任意数字数组进行快速排序
|
||||
- 作为开发者,我希望排序函数能够处理边界情况,如空数组或单元素数组
|
||||
- 作为开发者,我希望代码简洁易读,方便直接引用或修改
|
||||
- 作为开发者,我希望能够通过控制台输出验证排序结果
|
||||
|
||||
## Competitive Analysis
|
||||
|
||||
- Lodash sortBy: 功能强大但库体积较大,适合复杂项目
|
||||
- Array.prototype.sort: 原生方法,简单易用,但排序算法不固定
|
||||
- bubble-sort-js: 冒泡排序实现,简单但性能较差
|
||||
- merge-sort-js: 归并排序实现,稳定但代码相对复杂
|
||||
- timsort: 高性能混合排序,功能强大但实现复杂
|
||||
- fast-sort: 功能丰富,支持多种排序方式,但依赖较多
|
||||
- 简单手写快速排序: 轻量、无依赖,代码简洁,适合学习和小型项目
|
||||
|
||||
## Competitive Quadrant Chart
|
||||
|
||||
quadrantChart
|
||||
title "排序库的简洁性与性能对比"
|
||||
x-axis "低性能" --> "高性能"
|
||||
y-axis "复杂" --> "简洁"
|
||||
quadrant-1 "理想选择"
|
||||
quadrant-2 "需要优化"
|
||||
quadrant-3 "不推荐"
|
||||
quadrant-4 "性能优先"
|
||||
"Lodash sortBy": [0.7, 0.4]
|
||||
"Array.prototype.sort": [0.6, 0.8]
|
||||
"bubble-sort-js": [0.2, 0.7]
|
||||
"merge-sort-js": [0.65, 0.45]
|
||||
"timsort": [0.85, 0.25]
|
||||
"fast-sort": [0.75, 0.35]
|
||||
"Our Target Product": [0.75, 0.85]
|
||||
|
||||
## Requirement Analysis
|
||||
|
||||
该项目要求使用JavaScript实现一个快速排序算法,核心需求是对数字数组进行排序。无需任何UI界面,代码应尽量简单明了。快速排序是一种高效的分治排序算法,平均时间复杂度为O(n log n)。实现时需考虑:选取基准元素、分区操作、递归排序子数组,同时需处理空数组和单元素等边界情况。
|
||||
|
||||
## Requirement Pool
|
||||
|
||||
- ['P0', '实现核心快速排序函数,能够对数字数组进行升序排序']
|
||||
- ['P0', '处理边界情况:空数组、单元素数组、已排序数组']
|
||||
- ['P1', '在代码中提供示例调用,通过console.log输出排序结果以便验证']
|
||||
- ['P1', '代码添加必要注释,说明算法步骤和逻辑']
|
||||
- ['P2', '支持可选的降序排序参数']
|
||||
|
||||
## UI Design draft
|
||||
|
||||
无UI设计需求。程序仅包含纯JavaScript逻辑代码,通过Node.js或浏览器控制台运行,使用console.log输出排序前后的数组结果进行验证。
|
||||
|
||||
## Anything UNCLEAR
|
||||
|
||||
目前需求较为明确。可进一步确认的点:1) 是否需要支持降序排序;2) 是否需要处理非数字元素的过滤;3) 运行环境是Node.js还是浏览器环境(不影响核心实现)。
|
||||
|
||||
33
resources/seq_flow/20260326152929.mmd
Normal file
33
resources/seq_flow/20260326152929.mmd
Normal file
@@ -0,0 +1,33 @@
|
||||
|
||||
sequenceDiagram
|
||||
participant M as Main (index.js)
|
||||
participant QS as QuickSort (quickSort.js)
|
||||
|
||||
M->>M: 定义测试数组 testArrays
|
||||
M->>QS: quickSort([], false)
|
||||
QS-->>M: 返回 []
|
||||
M->>M: console.log 输出空数组结果
|
||||
|
||||
M->>QS: quickSort([42], false)
|
||||
QS-->>M: 返回 [42]
|
||||
M->>M: console.log 输出单元素结果
|
||||
|
||||
M->>QS: quickSort([3,6,8,10,1,2,1], false)
|
||||
QS->>QS: 选取 pivot = arr[middle]
|
||||
QS->>QS: 分区为 left, middle, right
|
||||
QS->>QS: quickSort(left, false) 递归
|
||||
QS->>QS: quickSort(right, false) 递归
|
||||
QS-->>M: 返回升序排序结果
|
||||
M->>M: console.log 输出升序结果
|
||||
|
||||
M->>QS: quickSort([3,6,8,10,1,2,1], true)
|
||||
QS->>QS: 选取 pivot = arr[middle]
|
||||
QS->>QS: 分区为 left(>pivot), middle, right(<pivot)
|
||||
QS->>QS: quickSort(left, true) 递归
|
||||
QS->>QS: quickSort(right, true) 递归
|
||||
QS-->>M: 返回降序排序结果
|
||||
M->>M: console.log 输出降序结果
|
||||
|
||||
M->>QS: quickSort([1,2,3,4,5], false)
|
||||
QS-->>M: 返回已排序数组
|
||||
M->>M: console.log 输出已排序数组结果
|
||||
64
resources/system_design/20260326152929.md
Normal file
64
resources/system_design/20260326152929.md
Normal file
@@ -0,0 +1,64 @@
|
||||
## Implementation approach
|
||||
|
||||
实现一个纯JavaScript的快速排序算法,无需任何第三方依赖库。采用经典的分治策略:选取基准元素(pivot),将数组分为小于、等于、大于基准的三个部分,递归排序后合并。同时支持升序/降序参数,处理边界情况(空数组、单元素数组),并通过console.log提供示例验证。代码结构简单,仅需两个文件:核心排序模块和入口示例文件。
|
||||
|
||||
## File list
|
||||
|
||||
- index.js
|
||||
- quickSort.js
|
||||
|
||||
## Data structures and interfaces
|
||||
|
||||
|
||||
classDiagram
|
||||
class QuickSort {
|
||||
+quickSort(arr: number[], descending: boolean) number[]
|
||||
-partition(arr: number[], descending: boolean) object
|
||||
}
|
||||
class Main {
|
||||
+run() void
|
||||
}
|
||||
Main --> QuickSort : uses
|
||||
|
||||
|
||||
## Program call flow
|
||||
|
||||
|
||||
sequenceDiagram
|
||||
participant M as Main (index.js)
|
||||
participant QS as QuickSort (quickSort.js)
|
||||
|
||||
M->>M: 定义测试数组 testArrays
|
||||
M->>QS: quickSort([], false)
|
||||
QS-->>M: 返回 []
|
||||
M->>M: console.log 输出空数组结果
|
||||
|
||||
M->>QS: quickSort([42], false)
|
||||
QS-->>M: 返回 [42]
|
||||
M->>M: console.log 输出单元素结果
|
||||
|
||||
M->>QS: quickSort([3,6,8,10,1,2,1], false)
|
||||
QS->>QS: 选取 pivot = arr[middle]
|
||||
QS->>QS: 分区为 left, middle, right
|
||||
QS->>QS: quickSort(left, false) 递归
|
||||
QS->>QS: quickSort(right, false) 递归
|
||||
QS-->>M: 返回升序排序结果
|
||||
M->>M: console.log 输出升序结果
|
||||
|
||||
M->>QS: quickSort([3,6,8,10,1,2,1], true)
|
||||
QS->>QS: 选取 pivot = arr[middle]
|
||||
QS->>QS: 分区为 left(>pivot), middle, right(<pivot)
|
||||
QS->>QS: quickSort(left, true) 递归
|
||||
QS->>QS: quickSort(right, true) 递归
|
||||
QS-->>M: 返回降序排序结果
|
||||
M->>M: console.log 输出降序结果
|
||||
|
||||
M->>QS: quickSort([1,2,3,4,5], false)
|
||||
QS-->>M: 返回已排序数组
|
||||
M->>M: console.log 输出已排序数组结果
|
||||
|
||||
|
||||
## Anything UNCLEAR
|
||||
|
||||
1) 降序排序参数已作为可选功能(P2)纳入实现,默认为升序;2) 非数字元素过滤未在需求中明确要求,本实现假设输入均为数字数组;3) 运行环境兼容Node.js和浏览器,不影响核心逻辑。
|
||||
|
||||
Reference in New Issue
Block a user