@any86/quick-sort
Advanced tools
+4
-1
@@ -0,1 +1,3 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| function compareNumber(pivotItem, currentItem) { | ||
@@ -21,3 +23,3 @@ return pivotItem - currentItem; | ||
| } | ||
| export default function quickSort(array, compareFn = compareNumber) { | ||
| function quickSort(array, compareFn = compareNumber) { | ||
| const startIndex = 0; | ||
@@ -39,2 +41,3 @@ const endIndex = array.length - 1; | ||
| } | ||
| exports.default = quickSort; | ||
| //# sourceMappingURL=index.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,SAAS,aAAa,CAAC,SAAiB,EAAE,WAAmB;IACzD,OAAO,SAAS,GAAG,WAAW,CAAC;AACnC,CAAC;AASD,SAAS,SAAS,CAAgB,KAAa,EAAE,UAAkB,EAAE,QAAgB,EAAE,SAAwB;IAE3G,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IAEhC,IAAI,WAAW,GAAG,UAAU,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,EAAE,EAAE;QAC7C,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE;YAChC,WAAW,EAAE,CAAC;YACd,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;SAC/B;KACJ;IACD,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IACrC,OAAO,WAAW,CAAC;AACvB,CAAC;AAGD,SAAS,IAAI,CAAC,KAAgB,EAAE,CAAS,EAAE,CAAS;IAChD,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACnB,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACpB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACjB,CAAC;AAWD,MAAM,CAAC,OAAO,UAAU,SAAS,CAAgB,KAAa,EAAE,YAA2B,aAAoB;IAC3G,MAAM,UAAU,GAAG,CAAC,CAAC;IACrB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAElC,MAAM,KAAK,GAAuB,EAAE,CAAC;IACrC,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE;QACvB,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QAC5C,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QACrE,IAAI,UAAU,GAAG,UAAU,GAAG,CAAC,EAAE;YAC7B,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;SAC5C;QACD,IAAI,UAAU,GAAG,CAAC,GAAG,QAAQ,EAAE;YAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;SAC1C;KACJ;IACD,OAAO,KAAK,CAAC;AACjB,CAAC"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAOA,SAAS,aAAa,CAAC,SAAiB,EAAE,WAAmB;IACzD,OAAO,SAAS,GAAG,WAAW,CAAC;AACnC,CAAC;AASD,SAAS,SAAS,CAAgB,KAAa,EAAE,UAAkB,EAAE,QAAgB,EAAE,SAAwB;IAE3G,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IAEhC,IAAI,WAAW,GAAG,UAAU,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,EAAE,EAAE;QAC7C,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE;YAChC,WAAW,EAAE,CAAC;YACd,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;SAC/B;KACJ;IACD,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IACrC,OAAO,WAAW,CAAC;AACvB,CAAC;AAGD,SAAS,IAAI,CAAC,KAAgB,EAAE,CAAS,EAAE,CAAS;IAChD,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACnB,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACpB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACjB,CAAC;AAWD,SAAwB,SAAS,CAAgB,KAAa,EAAE,YAA2B,aAAoB;IAC3G,MAAM,UAAU,GAAG,CAAC,CAAC;IACrB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAElC,MAAM,KAAK,GAAuB,EAAE,CAAC;IACrC,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE;QACvB,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QAC5C,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QACrE,IAAI,UAAU,GAAG,UAAU,GAAG,CAAC,EAAE;YAC7B,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;SAC5C;QACD,IAAI,UAAU,GAAG,CAAC,GAAG,QAAQ,EAAE;YAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;SAC1C;KACJ;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAjBD,4BAiBC"} |
@@ -1,1 +0,1 @@ | ||
| function compareNumber(pivotItem,currentItem){return pivotItem-currentItem}function partition(array,startIndex,endIndex,compareFn){const pivot=array[startIndex];let divideIndex=startIndex;for(let i=startIndex+1;i<=endIndex;i++){if(0>compareFn(array[i],pivot)){divideIndex++;swap(array,divideIndex,i)}}swap(array,divideIndex,startIndex);return divideIndex}function swap(array,i,j){const v=array[i];array[i]=array[j];array[j]=v}export default function quickSort(array,compareFn=compareNumber){const startIndex=0;const endIndex=array.length-1;const stack=[];stack.push([startIndex,endIndex]);while(0!==stack.length){const[startIndex,endIndex]=stack.pop();const pivotIndex=partition(array,startIndex,endIndex,compareFn);if(startIndex<pivotIndex-1){stack.push([startIndex,pivotIndex-1])}if(pivotIndex+1<endIndex){stack.push([pivotIndex+1,endIndex])}}return array} | ||
| "use strict";Object.defineProperty(exports,"__esModule",{value:true});function compareNumber(pivotItem,currentItem){return pivotItem-currentItem}function partition(array,startIndex,endIndex,compareFn){const pivot=array[startIndex];let divideIndex=startIndex;for(let i=startIndex+1;i<=endIndex;i++){if(0>compareFn(array[i],pivot)){divideIndex++;swap(array,divideIndex,i)}}swap(array,divideIndex,startIndex);return divideIndex}function swap(array,i,j){const v=array[i];array[i]=array[j];array[j]=v}function quickSort(array,compareFn=compareNumber){const startIndex=0;const endIndex=array.length-1;const stack=[];stack.push([startIndex,endIndex]);while(0!==stack.length){const[startIndex,endIndex]=stack.pop();const pivotIndex=partition(array,startIndex,endIndex,compareFn);if(startIndex<pivotIndex-1){stack.push([startIndex,pivotIndex-1])}if(pivotIndex+1<endIndex){stack.push([pivotIndex+1,endIndex])}}return array}exports.default=quickSort; |
+5
-2
| { | ||
| "name": "@any86/quick-sort", | ||
| "version": "0.0.3", | ||
| "version": "0.0.4", | ||
| "description": "快速排序", | ||
@@ -13,2 +13,5 @@ "main": "dist/index.js", | ||
| ], | ||
| "files": [ | ||
| "dist" | ||
| ], | ||
| "author": "any86", | ||
@@ -43,3 +46,3 @@ "homepage": "https://github.com/any86/my/packages/clickOutside#readme", | ||
| }, | ||
| "gitHead": "f7194f06e61921dbd3f6969114d40673361b6111" | ||
| "gitHead": "abd05f4ec67efd5ee4bd8af4ec451256fc2adc0d" | ||
| } |
| module.exports = { | ||
| preset: 'ts-jest/presets/js-with-babel', | ||
| testEnvironment: 'jsdom', | ||
| collectCoverage: true, | ||
| verbose: false, | ||
| }; |
-67
| type Compare<T> = (pivotItem: T, currentItem: T) => number; | ||
| /** | ||
| * 比较函数 | ||
| * @param pivotItem 待比较值 | ||
| * @param currentItem 当前值 | ||
| * @returns 数组,大于0正序,反之倒序 | ||
| */ | ||
| function compareNumber(pivotItem: number, currentItem: number): number { | ||
| return pivotItem - currentItem; | ||
| } | ||
| /** | ||
| * 分区, | ||
| * @param array | ||
| * @param startIndex | ||
| * @param endIndex | ||
| * @returns | ||
| */ | ||
| function partition<Item = number>(array: Item[], startIndex: number, endIndex: number, compareFn: Compare<Item>) { | ||
| // 参考值 | ||
| const pivot = array[startIndex]; | ||
| // 分割标准值的索引 | ||
| let divideIndex = startIndex; | ||
| for (let i = startIndex + 1; i <= endIndex; i++) { | ||
| if (0 > compareFn(array[i], pivot)) { | ||
| divideIndex++; | ||
| swap(array, divideIndex, i); | ||
| } | ||
| } | ||
| swap(array, divideIndex, startIndex); | ||
| return divideIndex; | ||
| } | ||
| function swap(array: unknown[], i: number, j: number) { | ||
| const v = array[i]; | ||
| array[i] = array[j]; | ||
| array[j] = v; | ||
| } | ||
| /** | ||
| * 快速排序(原地排序) | ||
| * 通过参数可以选择被排序的索引范围 | ||
| * 参考: https://zhuanlan.zhihu.com/p/109971850 | ||
| * @param array 数组 | ||
| * @param startIndex 起始索引 | ||
| * @param endIndex 结束索引 | ||
| * @returns | ||
| */ | ||
| export default function quickSort<Item = number>(array: Item[], compareFn: Compare<Item> = compareNumber as any): Item[] { | ||
| const startIndex = 0; | ||
| const endIndex = array.length - 1; | ||
| const stack: [number, number][] = []; | ||
| stack.push([startIndex, endIndex]); | ||
| while (0 !== stack.length) { | ||
| const [startIndex, endIndex] = stack.pop()!; | ||
| const pivotIndex = partition(array, startIndex, endIndex, compareFn); | ||
| if (startIndex < pivotIndex - 1) { | ||
| stack.push([startIndex, pivotIndex - 1]); | ||
| } | ||
| if (pivotIndex + 1 < endIndex) { | ||
| stack.push([pivotIndex + 1, endIndex]); | ||
| } | ||
| } | ||
| return array; | ||
| } |
| { | ||
| "extends": "../../tsconfig.json", | ||
| "compilerOptions": { | ||
| "outDir": "dist", | ||
| "declarationDir": "dist" | ||
| }, | ||
| "include": ["src/index.ts"] | ||
| } |
6684
-23.87%7
-30%43
-62.61%