Sorteer algoritmen: Bubble- en MergeSort

Status
Niet open voor verdere reacties.

IkWeetGeenNaam

Gebruiker
Lid geworden
16 sep 2004
Berichten
79
Beste mensen..

Ik ben hier al een week mee bezig en nog steeds kom ik er gewoonweg niet uit. Ik heb er voorbeelden van, die ik bij elkaar heb gebracht om het te laten werken. Dit hieronder (de bubblesort) heb ik werkend, ik kan een bestand inlezen en diezelfde bestand op een ander plek laten schrijven, maar de bubblesort blijft maar niet werken. Hij sorteert het dus niet tijdens het schrijven naar de 2e aangegeven locatie!

.. De 2e code, de MergeSort is een nog ergere ramp, die heb ik nog steeds niet werkend kunnen krijgen..

Dus als er vrijwilligers zijn die even naar mijn code zouden willen kijken en me vertellen wat ik verkeerd doe.. Heeeeeeeel graagggg

Mvg!!

Ik :)


BubbleSort:
Code:
/**
 * 
 */
package VijfdePoging;

import java.io.*;
/**
 * @author Administrator
 *
 */
public class VijfdePoging {
	  public static void main(String[] args) {
	    try {
	    
	      FileReader r = new FileReader("D:/ADS/text100.txt");
	      BufferedReader b = new BufferedReader(r);

	      String[] regel = new String[1000];
	      int teller = 0;

	      String huidigeRegel = b.readLine();
	      while (huidigeRegel != null && teller < regel.length) {
	        regel[teller] = huidigeRegel;
	        teller++;
	        huidigeRegel = b.readLine();
	        
	        
	      }
	      b.close();

	      int herhaling;
	      int regelTeller;
	      for (herhaling = 0; herhaling < 999; herhaling++)
	        for (regelTeller = 0; regelTeller < teller - 1; regelTeller++)
	          if (regel[regelTeller].compareTo(regel[regelTeller + 1]) > 0) {
	            String temp = regel[regelTeller];
	            regel[regelTeller] = regel[regelTeller + 1];
	            regel[regelTeller + 1] = temp;
	          }

	      
	      FileWriter w = new FileWriter("C:/textTEST.txt");
	      PrintWriter p = new PrintWriter(w);

	      for (int i = 0; i < teller; i++)
	        p.println(regel[i]);
	      p.close();
	    }
	    catch (FileNotFoundException e) {
	      System.out.println("Invoerbestand niet gevonden.");
	    }
	    catch (IOException e) {
	      System.out.println("Algemene invoer/uitvoerfout.");
	    }
	    catch (ArrayIndexOutOfBoundsException e) {
	      System.out.println("Geef twee bestandsnamen mee als opdrachtregel-parameters.");
	    }
	  }
	}


MergeSort:
Code:
/**
 * 
 */
package test;

import java.applet.Applet;
import java.io.*;
import java.util.Arrays;
import java.util.List;

/**
 * @author Administrator
 *
 */
public class LeesSorteer {
	public static void main( String[] args ) {
		BufferedReader in;
		String regel;		{
			
			try {
		
		if(gui.listKeuze == 1) lijst = new ArrayList();
		else lijst = new LinkedList();
				
		Lezer lezer = new Lezer(lijst);
		lezer.lezen((String)gui.fileList.getSelectedItem());
				
		Date tijd = new Date();
		duur1 = tijd.getTime();
				
		if(gui.sortKeuze == 1) sorteerder.sortStandard(lijst);
		else sorteerder.sortMerge(lijst);	

		in = new BufferedReader(new FileReader( "D:/ADS/text100.txt" ));
		while (( regel = in.readLine()) != null){
			StringTokenizer st = new StringTokenizer(regel);
			while (st.hasMoreTokens()) {
				woord = new Woord(); 
				woord.setWoord(st.nextToken());
				lijst.add(woord);
			}
		}
			}
			
			finally{
				try {
			
			while ( ( regel = in.readLine() ) != null ) {
				System.out.println( regel );
				}
			in.close();
				}
		catch( FileNotFoundException e ) {
			System.out.println( "Kan bestand niet vinden" );
		} 
		catch( IOException e ) {
			System.out.println( "Fout bij het lezen of sluiten bestand" );
			e.printStackTrace();{
		
			}
			}

	public List sortStandard(List lijst){
		Object[] objectReeks = lijst.toArray(); 
			lijst.clear();
			Arrays.sort(objectReeks);
			for(int i=0;i<objectReeks.length;i++){
				lijst.add(objectReeks[i]);
			}
			
			return lijst;	
		}

	private void mergeSort(Object src[], Object dest[], int low, int high){
		int length = high - low;
			
		if(length > 1){
			int mid = (low + high) / 2;
			mergeSort(dest, src, low, mid);
			mergeSort(dest, src, mid, high);
				
			int p=low, q=mid,i=low;
			while(p<mid && q<high){
				if(((Comparable) src[p]).compareTo((Comparable) src[q]) <=0)
					dest[i++] = src[p++];
				else
					dest[i++] = src[q++];
				}
				while(p<mid) dest[i++] = src[p++];
				while(q<high) dest[i++]= src[q++];
			}
	}
	public List sortMerge(List lijst){
		Object[] objectReeks = lijst.toArray(); 
		lijst.clear();
			
		Object hulp[] = (Object[]) objectReeks.clone();
		mergeSort(hulp, objectReeks, 0, objectReeks.length);
			
		for(int i=0;i<objectReeks.length;i++){
			lijst.add(objectReeks[i]);
		}
		return lijst;
	}
	
	}
 
Weet je wel hoe de principes van bubble- en mergesort werken?
Je code ziet er erg rommelig uit, dus het helpt vast ook om die wat op te schonen.
 
Sauria zei:
Weet je wel hoe de principes van bubble- en mergesort werken?
Je code ziet er erg rommelig uit, dus het helpt vast ook om die wat op te schonen.
Allereerst bedankt voor je reactie.. Eh nee.. Zoals je wel zult merken van mijn 1e post heb ik duidelijk proberen te maken dat ik weinig afweet van programmeren. Ik heb ook aangegeven dat ik voorbeelden bij elkaar heb proberen te voegen om het werkend te krijgen. Ik kan in ieder geval wel het bestand laten inlezen, maar de sorts en het erna op laten slaan lukt me niet.

Ik zou niet weten wat de rommel is waar je het over hebt en ik zou ook niet weten hoe ik het zou moeten opruimen.. Straks haal ik teveel code weg :confused:
 
Een beschrijving van de algoritmen van bubblesort en mergesort staat bijvoorbeeld op wikipedia: Bubblesort en Mergesort.
Bij mergesort staat zelfs de java code van het algoritme, dus misschien dat je daar wat aan hebt. Zo niet dat zal ik het alsnog proberen uit te leggen :thumb:
 
Sauria zei:
Een beschrijving van de algoritmen van bubblesort en mergesort staat bijvoorbeeld op wikipedia: Bubblesort en Mergesort.
Bij mergesort staat zelfs de java code van het algoritme, dus misschien dat je daar wat aan hebt. Zo niet dat zal ik het alsnog proberen uit te leggen :thumb:
Oké, dank je wel.. ik wist niet dat ze op wikidpedia ook stonden.. dat heeft me enorm geholpen!

Nogmaals dank!!! :)

Groetjes
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan