-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy path28.rkt
30 lines (24 loc) · 821 Bytes
/
28.rkt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#lang racket
(define (my-quick-sort l key)
(if (empty? l)
empty
(append (my-quick-sort (filter (lambda (v) (< (key v) (key (car l)))) (cdr l)) key)
(list (car l))
(my-quick-sort (filter (lambda (v) (<= (key (car l)) (key v))) (cdr l)) key)))
)
(define (group l key)
(let iter ([v-list (list (car l))][l (cdr l)])
(cond
[(empty? l) (list v-list)]
[(= (key (car v-list)) (key (car l))) (iter (cons (car l) v-list) (cdr l))]
[else (cons v-list (iter (list (car l)) (cdr l)))]))
)
(define (lsort l)
(my-quick-sort l length)
)
(define (lfsort l)
(apply append (lsort (group (lsort l) length)))
)
;------------------------------
(lsort '((a b c) (d e) (f g h) (d e) (i j k l) (m n) (o)))
(lfsort '((a b c) (d e) (f g h) (d e) (i j k l) (m n) (o)))