1- import { isRightArray } from "../utils"
1+ import { getLCP } from "../utils"
22
33/**
4- * Sorts an array of numbers or strings using the merge sort algorithm.
4+ * Sorts an array of numbers using the merge sort algorithm.
55 * @param array The array to be sorted.
66 * @returns The sorted array.
77 */
8- export function mergeSort ( array : number [ ] ) : number [ ]
9- export function mergeSort ( array : string [ ] ) : string [ ]
10- export function mergeSort ( array : number [ ] | string [ ] ) {
8+ export function mergeSortNum ( array : number [ ] ) {
119 if ( array . length <= 1 ) return array
1210
1311 const middle = Math . floor ( array . length / 2 )
1412
15- let left = array . slice ( 0 , middle ) as never
16- let right = array . slice ( middle ) as never
13+ let left = array . slice ( 0 , middle )
14+ let right = array . slice ( middle )
1715
18- left = mergeSort ( left ) as never
19- right = mergeSort ( right ) as never
16+ left = mergeSortNum ( left )
17+ right = mergeSortNum ( right )
2018
21- let result : number [ ] | string [ ] = [ ]
19+ return mergeNumbers ( left , right )
20+ }
2221
23- if ( isRightArray < string > ( array ) ) result = mergeStrings ( left , right )
24- else if ( isRightArray < number > ( array ) ) result = mergeNumbers ( left , right )
22+ /**
23+ * Sorts an array of strings using the merge sort algorithm.
24+ * @param array The array to be sorted.
25+ * @returns The sorted array.
26+ */
27+ export function mergeSortStr ( array : string [ ] ) {
28+ if ( array . length <= 1 ) return array
2529
26- return result
30+ const middle = Math . floor ( array . length / 2 )
31+
32+ let left = array . slice ( 0 , middle )
33+ let right = array . slice ( middle )
34+
35+ left = mergeSortStr ( left )
36+ right = mergeSortStr ( right )
37+
38+ return mergeStrings ( left , right )
2739}
2840
2941function mergeNumbers ( left : number [ ] , right : number [ ] ) {
@@ -48,7 +60,7 @@ function mergeStrings(left: string[], right: string[]) {
4860 let result : string [ ] = [ ]
4961
5062 while ( left . length > 0 && right . length > 0 ) {
51- if ( compareLCP ( left [ 0 ] , right [ 0 ] ) <= 0 ) {
63+ if ( getLCP ( left [ 0 ] , right [ 0 ] ) <= 0 ) {
5264 result . push ( left [ 0 ] )
5365 left . shift ( )
5466 } else {
@@ -60,10 +72,4 @@ function mergeStrings(left: string[], right: string[]) {
6072 result = [ ...result , ...left , ...right ]
6173
6274 return result
63- }
64-
65- function compareLCP ( str1 : string , str2 : string ) {
66- let lcp = 0
67- while ( lcp < Math . min ( str1 . length , str2 . length ) && str1 [ lcp ] === str2 [ lcp ] ) lcp ++
68- return lcp
6975}
0 commit comments