Advertisement
rntreis

quicksort

Dec 16th, 2012
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 1.52 KB | None | 0 0
  1. ;; maiores : lista-de-números número -> lista-de-números
  2. ;; Retorna uma lista composta dos elementos da lista passada
  3. ;; como parâmetro que são maiores do que o número dado.
  4. (define (maiores ldn n)
  5.   (cond
  6.     [(empty? ldn) empty]
  7.     [(> (first ldn) n) (cons (first ldn) (maiores (rest ldn) n))]
  8.     [else (maiores (rest ldn) n)]))
  9.  
  10. ;; menores : lista-de-números número -> lista-de-números
  11. ;; Retorna uma lista composta dos elementos da lista passada
  12. ;; como parâmetro que são menores do que o número dado.
  13. (define (menores ldn n)
  14.   (cond
  15.     [(empty? ldn) empty]
  16.     [(< (first ldn) n) (cons (first ldn) (menores (rest ldn) n))]
  17.     [else (menores (rest ldn) n)]))
  18.  
  19. ;; iguais : lista-de-números número -> lista-de-números
  20. ;; Retorna uma lista composta dos elementos da lista passada
  21. ;; como parâmetro que são iguais ao o número dado.
  22. (define (iguais ldn n)
  23.   (cond
  24.     [(empty? ldn) empty]
  25.     [(= (first ldn) n) (cons (first ldn) (iguais (rest ldn) n))]
  26.     [else (iguais (rest ldn) n)]))
  27.  
  28. ;; quick-sort : lista-de-números -> lista-de-números
  29. ;; Organiza uma lista de números em ordem crescente.
  30. (define (quick-sort ldn)
  31.   (cond
  32.     [(empty? ldn) empty]
  33.     [else (local
  34.             ( (define esq (menores ldn (first ldn)))
  35.               (define cen (iguais ldn (first ldn)))
  36.               (define dir (maiores ldn (first ldn))) )
  37.             (append (quick-sort esq) cen (quick-sort dir)))]))
  38.  
  39. ;; Testes
  40. (quick-sort (list -4 -4 -2 -5 2 6 3 -2 -7))
  41. (quick-sort (list 9 8 7 6 5 4 3 2 1 0 1 1))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement