2009-10-09 8 views

Répondre

7

Si vous ne pouvez pas éditer les valeurs de liste ... retourner une nouvelle liste! :-)

0

Vous ne savez pas si vous êtes censé être écrire votre propre bubblesort aux devoirs, mais sinon cela est construit dans:

(tri (liste 1 2 4 3) <) (1 2 3 4)

+0

comment inclure la bibliothèque dans notre programme – Arunachalam

+2

En fait, le tri est * pas * construit pour r5rs Scheme. (http://schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-15.html#%_index_start). Le tri par bulles est également un mauvais choix pour Scheme; il est très difficile d'écrire par rapport au tri par insertion, par exemple. –

+0

Salut Nathan - merci ne savais pas que ce n'était pas dans la norme. J'ai juste commencé à apprendre le schéma. – Ben

2

la solution de tri d'insertion est assez facile dans le schéma (avec Bigo de N^2 performances, il est pauvre, mais ne fonctionne toujours le travail)

Pour trier n nombres, vous pouvez utiliser les données de la liste tapez pour maintenir les valeurs d'un d une liste de nombres est soit;

  • vide,

  • (nombre contre ListofNumber)

pour le tri d'insertion, vous avez besoin de 2 fonctions et introducteur qui fait un insert unique d'un numéro à une liste déjà triée des nombres et une autre fonction qui appellera cet insert récursivement.

L'entrée-sortie de la fonction d'insertion

;;insert: Number ListOfNumber(Sorted) -> ListOfNumber(Sorted) 
(define (insert n lon) 
    (cond 
     [(empty? lon) (cons n lon)] 
     [(<= n (first lon)) (cons n lon)] 
     (else 
      (cons (first lon) (insert n (rest lon)))))) 


;;insertion-sort: ListOfNumber -> ListOfNumber(Sorted) 
(define (insertion-sort lon) 
    (cond 
     [(empty? lon) lon] ;;if the list is empty than the numbers are sorted 
     (else 
      (insert (first lon) (insertion-sort (rest lon)))))) 

J'espère que cette réponse correspond à votre question

+0

Merci beaucoup pour cette réponse. – spectre10