Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jul 17th, 2012  |  syntax: None  |  size: 1.78 KB  |  hits: 10  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. package ads1ss11.pa1;
  2.  
  3.  
  4. /**
  5.  * Sorter Klasse in der die Methode {@link #mergesort(DoublyLinkedList, int)}
  6.  * implementiert werden soll.
  7.  *
  8.  * <p>
  9.  * In dieser Klasse m&uuml;ssen Sie Ihren Code einf&uuml;gen und die Method
  10.  * {@link #mergesort(DoublyLinkedList, int)} implementieren.
  11.  * </p>
  12.  *
  13.  * <p>
  14.  * Sie k&ouml;nnen beliebige neue Variablen und Methoden in dieser Klasse
  15.  * hinzuf&uuml;gen.
  16.  * </p>
  17.  */
  18.  
  19. public class Sorter {
  20.  
  21.         /**
  22.          * MergeSort Implementierung
  23.          *
  24.          * @param in Unsortierte Eingabefolge
  25.          * @param numOfElements Gr&ouml;&szlig;e der Eingabefolge
  26.          * @return Sortiterte Eingabefolge
  27.          */
  28.         public DoublyLinkedList mergesort(DoublyLinkedList in, int numOfElements) {
  29.                 ListElement end = split(in.first, numOfElements);
  30.                 in.first = end.next;
  31.                 return in;
  32.         }
  33.        
  34.         private ListElement split(ListElement start,int length){
  35.                 if(length==1)return start;
  36.                 int half = length/2;
  37.                 ListElement a = split(start,half);
  38.                 ListElement b = split(a.next,length-half);
  39.                
  40.                 return merge(a,b,half,length);
  41.         }
  42.        
  43.        
  44.         private ListElement merge(ListElement mid, ListElement end, int half, int length){
  45.                 ListElement LElement=mid,RElement=end;
  46.                 int l = half, r=length;
  47.                 while(l>0 && r > half){
  48.                         if(LElement.getKey()<=RElement.getKey()){
  49.                                 RElement = RElement.prev;
  50.                                 r--;
  51.                         }else{
  52.                                 ListElement LLinkerNachbar = LElement.prev;
  53.                                 ListElement RrechterNachbar = RElement.next;
  54.                                
  55.                                 LLinkerNachbar.next = LElement.next;
  56.                                 LElement.next.prev = LLinkerNachbar;
  57.                                
  58.                                 RElement.next = LElement;
  59.                                 LElement.prev = RElement;
  60.                                
  61.                                 RrechterNachbar.prev = LElement;
  62.                                 LElement.next = RrechterNachbar;
  63.                                
  64.                                 if(RElement==end){
  65.                                         end = LElement;
  66.                                 }
  67.                                
  68.                                 LElement = LElement.prev;
  69.                                 l--;
  70.                         }
  71.                 }
  72.                 return end;
  73.         }
  74. }