; diminishing gap sort

(define (zip . xss) (apply map list xss))

(define xs (list 80 256 144 5 12 134 15 14 121))

(define (gaps xs)
  (let ((ys (append (cdr xs) (list 0))))
    (zip (map - xs ys) xs)))

(display (gaps (sort xs >))) (newline)

(define (car> xs ys) (> (car xs) (car ys)))

(define (diminishing-gap-sort xs)
  (map cadr (sort (gaps (sort xs >)) car>)))

(display (diminishing-gap-sort xs)) (newline)