Gå til innhold

Implementering av Insertion Sort


Anbefalte innlegg

Hei!

Det er forøvrig JAVA det dreier seg om ^^

 

Jeg prøver å implementere en Insertion Sort metode i en eksisterende klasse.

Får ikke sorteringen til å fungere som den skal.

Kan noen hjelpe?

 

Under er den eksisterende koden.

 

/**
* This class is the same as ListStack, except that it keeps
* a pointer to the last element. This makes it suitable for
* implementation of a queue.
* 
* @author 
* @version 1.0
*/
public class ListQueue
{
   /** The list node class. Declared as a private inner
    * class because it is an implementation detail.
    * Nobody else needs to know about it. */
   private class Node {
       int data;
       Node next;

       public Node(int data, Node next) {
           this.data = data;
           this.next = next;
       }


       public void display() {
           System.out.print(" "+data);
       }
   }


   /** The start of the list */
   private Node first;
   private Node last;


   public ListQueue() {
       first = null;
       last = null;
   }


   public void insertFirst(int data) {
       // if empty, we don't want to mess with the last pointer here
       if (first == null) insertLast(data);
       else first = new Node(data, first);
   }


   public void insertLast(int data) {
       if (first == null) {
           // insert in empty queue - new node is both first and last 
           first = new Node(data, null);
           last = first;
       }
       else {
           last.next = new Node(data, null);
           last = last.next;
       }
   }



   public int removeFirst() throws Exception {
       if (first != null) {
           int data = first.data;
           // if we removed last, both first and last must be null
           if (first == last) {
               last = null;
               first = null;
           }
           else first = first.next;
           return data;
       }
       else throw new Exception("Can't remove from empty list!");
   }


   /** print queue contents */
   public void display() {
       System.out.print("Queue contents: {");
       Node current = first;
       while (current != null) {
           current.display();
           current = current.next;
       }
       System.out.println(" }");
   }


   /** enqueue() is an alias for insertLast() */
   public void enqueue(int data) {
       insertLast(data);
   }


   /** dequeue() is an alias for removeFirst() */
   public int dequeue() throws Exception {
       return removeFirst();
   }


   /** Demo */
   public static void main(String[] args) throws Exception {
       ListQueue q = new ListQueue();
       q.enqueue(1);
       q.enqueue(2);
       q.display();
       System.out.println(q.dequeue());
       System.out.println(q.dequeue());
       q.display();
       q.enqueue(3);
       q.enqueue(4);
       q.insertFirst(5);
       q.display();
   }
}

 

Og her er sorteringsmetoden vi ønsker å ha inn.

Den fungerer som sagt ikke som den skal.

Hvordan kan løse dette?

 

    
       public void sort() {

       Node old = first.next;
       Node current = first;

       first.next = null;

       while (old != null) {
           Node temp = old;
           old = old.next;

           while (current.next != null && current.data >= temp.data) {
               current.next.data = current.data;
               first.data = temp.data;
               current = current.next;
           }
           current.data = temp.data;
       }
   }

Endret av martingee
Lenke til kommentar
  • 2 uker senere...
Videoannonse
Annonse

Jeg prøver å implementere en Insertion Sort metode i en eksisterende klasse.

Får ikke sorteringen til å fungere som den skal.

Kan noen hjelpe?

 

Og her er sorteringsmetoden vi ønsker å ha inn.

Den fungerer som sagt ikke som den skal.

Hvordan kan løse dette?

Hva er problemet, igjen? Ikke bare gi masse kode som ikke fungerer, si nøyaktig hva som ikke fungerer, hva er symptomene? Blir output omvendt av hva du forventer? Er det noen elementer som ikke blir sortert? Går den i en uendelig løkke?
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...