Selection Sort in Liste implementieren

Status
Nicht offen für weitere Antworten.

JoeBo

Neues Mitglied
Hallo.
Ich hab folgendes Problem, ich will in diese Liste einen Selection Sort implementieren:
Code:
class DoubleList { 
  
  class ListNode {  
    
    private String value;
    private ListNode prev;    
    private ListNode next;

    public ListNode(String value, ListNode prev, ListNode next) {
      this.value = value;
      this.prev = prev;
      this.next = next;
      if (next != null) next.prev=this;    
      if (prev != null) prev.next = this;  
    }
    
    public void setPrev(ListNode prev) {
      this.prev = prev;
    }

    public void setNext(ListNode next) {
      this.next = next;
    }
    
    public void setValue(String value) {
      this.value = value;
    }
    
    public ListNode getPrev() {
      return prev;
    }

    public ListNode getNext() {
      return next;
    }
    
    public String getValue() {
      return value;
    }
  }
  
  private ListNode head;
  private ListNode tail;
  
  public DoubleList() {
    head = null;
    tail = null;
  }
  
  public void push_front(String value) {
    head = new ListNode(value, null, head);
    if (tail == null) {  
      tail = head;       
    }
  }
  
  public void push_back(String value) {
    tail = new ListNode(value, tail, null);
    if (head == null) {
      head = tail;
    }
  }      
    
  public ListNode getRoot() {
    return head;
  }
  
  public ListNode getTail() {
    return tail;
  }  
    
  public ListNode pop_front() {
    if (head == null) {
      return null;
    } else {
      ListNode result = head;   
      head = head.getNext();  
      head.setPrev(null); 
      return result;   
    }
  }
  
  public ListNode pop_back() {
    if (tail == null) {
      return null;
    } else {
      ListNode result = tail;
      tail = tail.getPrev();
      tail.setNext(null);
      return result;
    }
  }
  
  public void delete(ListNode node) {
    if(node != null) {
      if (head == node) {     
        head = node.getNext();
      }
      if (tail == node) {
        tail = node.getPrev();     
      }
      if (node.prev != null) {  
        node.getPrev().setNext(node.getNext());
      }
      if (node.next != null) {
        node.next.prev =node.prev; 
      }
    }
  }
    
  public void print() {
    for(ListNode node = head; node != null; node = node.getNext()) {
      System.out.print("(" + node.value + ") ");
    }
    System.out.println();
  }
  
  public int count(){
    int result = 0;
    ListNode node = head;
    while(node != null) {
      node = node.getNext();
      result++;
    }
    return result;
  }

  public ListNode find(String value) {
    for(ListNode node = head; node != null; node = node.next) {
      if (node.getValue().equals(value)) {  
        return node;   
      }
    }
    return null;
  }
}
public class ListExample {
  public static void main(String[] params) {
    DoubleList l = new DoubleList();
    l.push_back("0");
    l.push_back("1");
    l.push_back("2");
    l.push_back("3");
    l.push_back("4");
    l.push_front("5");
    l.push_front("6");
    l.push_front("7");
    l.push_front("8");
    System.out.println(l.count());
    l.print();

    l.delete(l.find("787"));
    l.pop_front();
    l.pop_back();
    l.print();  
  } 
}

Nun hab ich mehrere Ideen wie ich den Selection Sort implementieren kann aber irgendwie funktioniert keine so richtig.

Swap Methode:
Code:
public void swap(ListNode node1, ListNode node2){
  	ListNode tmp = node1;
  	node1 = node2;
  	node2 = tmp;
  }
Selection Sort Idee:
Code:
 public void SelectionSort(){
		for(ListNode node = head; node != tail; node=node.next){
			ListNode min = new ListNode(node.getValue(), node.getPrev(), node.getNext());
			for(ListNode node2 = node.getNext(); node2 != tail; node2=node2.next ){
				if(node2.getValue() < min.getValue())
					node2.setValue(min);
			}
		}
		
 }
oder
Code:
 public void SelectionSort(){
		for(ListNode node = head; node != tail; node=node.next){
			int min = node.getValue();
			for(ListNode node2 = node.getNext(); node2 != tail; node2=node2.next ){
				if(node2.getValue() < min)
					node2.setValue(min);
			}
		}
		
 }
Mein Hauptsächliches Problem besteht darin, die Strings mit ein ander zu vergleichen.

Wäre nett wenn ihr mir helfen könntet, langsam bin ich am verzweifeln.

Gruß JoeBo
 
S

SlaterB

Gast
nur mit Code lassen sich manche Probleme nicht lösen,

was soll z.B. "min = node2;" bedeuten?
min ist ein int, node2 ein ListNode..

überlege dir erstmal, was überhaupt passieren soll,
und beschreibe dies sauber in der deutschen Sprache, wenn dir Java noch nicht zusagt
 

JoeBo

Neues Mitglied
Ich hab mir überlegt was passieren soll, ich wollte einen Selection Sort für meine Liste implementieren. Wie der Selection Sort standartmäßig aussieht weiß ich, nur nicht wie ich ihn auf meine Liste anwenden soll.

So sieht der für eine Array von int aus:

Code:
public class SelectionSort {
	
	static void sort(int[] field){
		for(int i1=0;i1< field.length;i1++){
			int min = i1;
			for(int i2=i1+1; i2< field.length;i2++){
				if(field[i2]<field[min])
					min = i2;
			}
			swap(field, min, i1);
		}
	}

    static void swap(int[] field, int pos1, int pos2){
    	int tmp = field[pos1];
    	field[pos1] = field[pos2];
    	field[pos2] = tmp;
    }

"was soll z.B. "min = node2;" bedeuten?
min ist ein int, node2 ein ListNode.. "

stimmt das war ungewollt, durch das ganze copy paste hat sich da ein Fehler eingeschlichen.
Urpsrünglich war es: node2.setValue(min);
 
S

SlaterB

Gast
sowas in der Art könntest du hier dann auch nachbauen,
wenn du die Listen-Nodes so lassen willst, wie sie sind und nur ihren Value änderst,
das ist relativ leicht

...........



eine andere Taktik, die du deiner swap()-Operation nach verfolgst, ist,
die Nodes selber aus der Liste brutal herauszureißen und anderer Stelle wieder einzusetzen,

deine swap()-Operation macht aber praktisch noch gar nix,
sie vertauscht nur lokale Referenzen,
das hat auf die Liste selber keine Auswirkung,

wenn du das weiter verfolgen willst, dann vergiss erstmal die Sortierung,
erstelle dir ein Testliste mit 3-4 Elementen und versuch dort ganz profan das erste mit dem dritten Element zu tauschen,
das muss erstmal funktionieren!

so, und dazu ist es wichtig, die ganzen Referenzen prev und next neu zu setzen,
nicht nur von den beiden zu tauschenden Elementen, sondern auch von deren Vorgängern und Nachfolgern in der Liste,

am besten auf Papier vorher aufmalen

Spezialfälle beachten wie Anfang/ Ende der Liste oder dass die beiden Elemente direkt nebeneinander liegen,
einfacher ist vielleicht, nur einzelne Operationen 'entferne Node aus Liste' + 'fuege Node in Liste hinter Node x ein' zu schreiben,
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Liste von Integers mit Selection Sort sortieren Java Basics - Anfänger-Themen 3
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
Marc111111111 Selection Sort in Java?? Java Basics - Anfänger-Themen 6
J Fehler im Selection Sort Java Basics - Anfänger-Themen 5
B 2 dimensionales Array: Selection Sort Java Basics - Anfänger-Themen 4
N Selection Sort Problem Java Basics - Anfänger-Themen 19
B Selection sort Java Basics - Anfänger-Themen 33
E Selection Sort für beliebige Objekte Java Basics - Anfänger-Themen 24
U Selection Sort schnellere Variante Java Basics - Anfänger-Themen 17
T Selection-Sort-Algorithmus Java Basics - Anfänger-Themen 9
I Selection-Sort // Array *help* Java Basics - Anfänger-Themen 2
0 Selection Sort funktioniert nicht. Java Basics - Anfänger-Themen 3
N Selection Algorithmus: Methode wird nicht erkannt (BlueJ) Java Basics - Anfänger-Themen 3
Salo JTabel Selection listener Bsp. Java Basics - Anfänger-Themen 3
M The Selection cannot be launched... Java Basics - Anfänger-Themen 4
S Selection does not contain a main type! Java Basics - Anfänger-Themen 5
S Selection does not contain a main type Java Basics - Anfänger-Themen 12
T selection method does not contain a main type Java Basics - Anfänger-Themen 7
F JTable speichern, Fehler bei Selection Java Basics - Anfänger-Themen 3
K Erste Schritte selection does not contain a main type Java Basics - Anfänger-Themen 3
J "this selection cannot be launched..." eclipse fehlermeldung Java Basics - Anfänger-Themen 7
V Eclipse "Selection does not contain a main type" Java Basics - Anfänger-Themen 13
I deselect oder Selection aufheben Java Basics - Anfänger-Themen 2
B Selection does not contain a main type Java Basics - Anfänger-Themen 2
S jList Multiple Selection mit Klick Java Basics - Anfänger-Themen 2
T Auf Selection warten Java Basics - Anfänger-Themen 7
R JPopupMenu + single selection Java Basics - Anfänger-Themen 8
emreiu Formatiertes Output bei Insertion Sort Java Basics - Anfänger-Themen 6
O Sortieren mit Insertion Sort Java Basics - Anfänger-Themen 3
Tw1Z Erste Schritte Sort in java Java Basics - Anfänger-Themen 2
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
X Collections.sort als Lambda Java Basics - Anfänger-Themen 14
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
L Insertion Sort bei zweidimensionalem Array Java Basics - Anfänger-Themen 7
G Insertion Sort mit Aray Java Basics - Anfänger-Themen 5
O Collections.sort und List.sort mit Lambda Verwirrung Java Basics - Anfänger-Themen 5
B Collections.sort mit zwei Bedingungen? Java Basics - Anfänger-Themen 4
M Collection.sort sortiert nicht Java Basics - Anfänger-Themen 7
CptK Best Practice Merge-Sort als Baum darstellen Java Basics - Anfänger-Themen 3
P Java Bubble Sort,Anfängerfehler Java Basics - Anfänger-Themen 4
S Methoden Sort Array Java Basics - Anfänger-Themen 9
I Erste Schritte sort() vs. sort() Java Basics - Anfänger-Themen 9
BadBat ArrayList<String> sort by last word Java Basics - Anfänger-Themen 8
U Methoden Zweidimensionales Array mit Arrays.sort sortieren? Java Basics - Anfänger-Themen 22
X Quick Sort - Vergleichsoperationen zählen Java Basics - Anfänger-Themen 0
O Insertion Sort Java Basics - Anfänger-Themen 4
N Bubble Sort sortieren mit Int Werte Java Basics - Anfänger-Themen 8
C OOP array Sortieren ohne den sort Befehl Java Basics - Anfänger-Themen 10
S int-Array mittels Arrays.sort() in einer Schleife sortieren. Java Basics - Anfänger-Themen 2
N Schlüsselworte Bubble Sort nach eigener Ordnung Java Basics - Anfänger-Themen 8
O Listen sort-Methode Java Basics - Anfänger-Themen 1
M Quick Sort Java Basics - Anfänger-Themen 4
V Heap-Sort Java Basics - Anfänger-Themen 0
M Methoden Quick Sort Java Basics - Anfänger-Themen 5
T array.sort mit zwei Kriterien Java Basics - Anfänger-Themen 8
S Liste und Bubble Sort Java Basics - Anfänger-Themen 4
H Collections Was ist schneller - HashMap + Sort v TreeMap? Java Basics - Anfänger-Themen 75
S Fehler bei Arrays.sort(array) - Methode!? Java Basics - Anfänger-Themen 3
P collections.sort Java Basics - Anfänger-Themen 2
B Arrays.sort Java Basics - Anfänger-Themen 4
P schneller Sort ? Java Basics - Anfänger-Themen 2
S Bubble Sort Java Basics - Anfänger-Themen 5
B Merge-Sort Analyse Java Basics - Anfänger-Themen 27
K Array.sort() Java Basics - Anfänger-Themen 12
H Etwas wie sort() / sorted() in JAVA-Collections? Java Basics - Anfänger-Themen 5
F Methoden Insert Sort Fehler Java Basics - Anfänger-Themen 10
P Ein sort problem Java Basics - Anfänger-Themen 6
S Bubble Sort Algorithmus Java Basics - Anfänger-Themen 3
Spin sort tokens - somebody knows a better solution? Java Basics - Anfänger-Themen 13
B Strings alphabentisch sortieren mit Hilfe von insertion sort Java Basics - Anfänger-Themen 6
P Array.sort // Arrays ausgeben Java Basics - Anfänger-Themen 21
S String sortieren mit Interface und sort() Java Basics - Anfänger-Themen 6
F Arrays.sort( ) Problem Java Basics - Anfänger-Themen 14
Dit_ Collections.sort(..); | Anwendung Java Basics - Anfänger-Themen 4
N java.util.Arrays.sort Warum sind Leerzeichen vor alphabetischen Zeichen sortiert? Java Basics - Anfänger-Themen 12
D Insertion sort auf eine liste Java Basics - Anfänger-Themen 4
X Counting Sort Java Basics - Anfänger-Themen 5
P Problem mit Insertion Sort Java Basics - Anfänger-Themen 4
G Quick Sort - bin ich zu blöd? Java Basics - Anfänger-Themen 7
D sort.exe über java aufrufen Java Basics - Anfänger-Themen 2
V Bubble Sort endet in Endlosschleife Java Basics - Anfänger-Themen 4
S Collection<Typ> sort Java Basics - Anfänger-Themen 4
hedges Insertion Sort Algorithmus problem Java Basics - Anfänger-Themen 18
N Collections Sort ArrayList<> Java Basics - Anfänger-Themen 7
K Arrays.sort() Java Basics - Anfänger-Themen 2
S Collection Sort Java Basics - Anfänger-Themen 15
O Arrays und sort Java Basics - Anfänger-Themen 4
G sort(int[] a, int fromIndex, int toIndex) Java Basics - Anfänger-Themen 5
F Klassenmethode Arrays.sort(Object[]a) Java Basics - Anfänger-Themen 2
H Bubble sort array Java Basics - Anfänger-Themen 12
M Bubble-Sort und null Werte Java Basics - Anfänger-Themen 4
G Zählen von Zuweisungen bei Bubble Sort Java Basics - Anfänger-Themen 3
I Methode Arrays.sort(Object[] arr) Java Basics - Anfänger-Themen 19
K compareTo in Verbinug mit Arrays.sort() Java Basics - Anfänger-Themen 4
D Frage zu Collection.sort bzw. Comparator u. Comparable Java Basics - Anfänger-Themen 2
U Array.sort auf variable Array-Größe anwenden Java Basics - Anfänger-Themen 3
D Mit java.util.Arrays.sort die negativen Zahlen hinten Java Basics - Anfänger-Themen 4
D Collections.sort() frage Java Basics - Anfänger-Themen 6
V Sortieren mit Bubble-Sort Java Basics - Anfänger-Themen 5
G Arrays.sort() will nicht sortieren Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben