Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Bubblesort Algorithmus für Strings

Diskussion: Bubblesort Algorithmus für Strings im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Ich würde mich über hilfreiche Kommentare zur "Ansehnlichkeit" des Codes und über Verbesserungsvorschläge freuen [; Java-Code     package ...

Like Tree2Likes
  • 1 Post By Scutus
  • 1 Post By mauralix

Antwort
Alt 05.05.11, 17:45   #1 (permalink)
 
Registriert seit: 22.03.11
artifexumbrarum Leistung: Facit NTK
Likes: 0
Standard Bubblesort Algorithmus für Strings

Anzeige

Ich würde mich über hilfreiche Kommentare zur "Ansehnlichkeit" des Codes und über Verbesserungsvorschläge freuen [;

Java-Code   

package bubblesort;

/**
*
* @version v0.2 (05/05/11)
*
*/
public class SortString
{
private int elements;
private String[] sortContent;

//Constructor
public SortString(int pElements, String[] pSortContent)
{
elements = pElements;
sortContent = new String[elements];
for(int i=0; i < elements; i++)
{
sortContent[i] = pSortContent[i];
}
sortString();
}

//Sortieralgorithmus
private void sortString()
{
String temp;
boolean changed = true;
while(changed == true)
{
changed = false;
for(int i=0; i<elements; i++)
{
if(getOrder(sortContent[i], sortContent[i++]) == true)
{
temp = sortContent[i];
sortContent[i] = sortContent[i++];
sortContent[i++] = temp;
changed = true;
}
}
}
}

private boolean getOrder(String pCurrentItem, String pNextItem)
{
if(defineOrder(pCurrentItem, 1, 1)>defineOrder(pNextItem, 1, 1))
{
return true;
}
else
{
return false;
}
}

private double defineOrder(String pItem, double pGrade, int pIndex)
{

double result = 0;
if(pItem.charAt(pIndex)=='A' || pItem.charAt(pIndex)=='a')
{
result = result+(1/pGrade);
defineOrder(pItem, pGrade*10, pIndex++);
}
else if(pItem.charAt(pIndex)=='B' || pItem.charAt(pIndex)=='B')
{
result = result+(2/pGrade);
defineOrder(pItem, pGrade*10, pIndex++);
}

//und so weiter

else if(pItem.charAt(pIndex)=='Z' || pItem.charAt(pIndex)=='z')
{
result = result+(26/pGrade);
defineOrder(pItem, pGrade*10, pIndex++);
}
//edit v0.2
else if(pItem.charAt(pIndex)=='Ä' || pItem.charAt(pIndex)=='ä')
{
result = result+(1.5/pGrade);
defineOrder(pItem, pGrade*10, pIndex++);
}else if(pItem.charAt(pIndex)=='Ö' || pItem.charAt(pIndex)=='ö')
{
result = result+(15.5/pGrade);
defineOrder(pItem, pGrade*10, pIndex++);
}
else if(pItem.charAt(pIndex)=='Ü' || pItem.charAt(pIndex)=='ü')
{
result = result+(21.5/pGrade);
defineOrder(pItem, pGrade*10, pIndex++);
}
return result;
}
}

Geändert von artifexumbrarum (05.05.11 um 18:09 Uhr)
artifexumbrarum ist offline   Mit Zitat antworten
Alt 05.05.11, 18:08   #2 (permalink)
 
Benutzerbild von Scutus
 
Registriert seit: 02.09.10
Scutus Leistung: Pentium IScutus Leistung: Pentium IScutus Leistung: Pentium I
Scutus eine Nachricht über ICQ schicken Scutus eine Nachricht über Skype™ schicken
Likes: 21
Standard

Hey

Wieso übergibst du dem Konstruktor extra die Anzahl der Elemente? Du hast sie doch schon durch deinen Array vorgegeben. Dadurch ist dein Programm auch anfällig, z.B.: SortString = new SortString(100, [a, b, e, r]); <-- hier solltest du einen Fehler bekommen...
Es ist schon möglich, dass du den Array komplett durchläufst, aber warum übergibst du nicht einfach die Referenz?

Deine getOrder-Methode, bzw. defineOrder finde ich etwas redundant. Zum einen musst du bei defineOrder nicht jeden Buchstaben lower- und upper-Case aufzählen (dein 'B' ist falsch...) sondern kannst gleich alle im Array als lower-Case schreiben! Zum anderen gibt es so was wie eine ASCII-Tabelle, worin die Buchstaben nach deren Reihenfolge aufgeschrieben sind.

Dein Sortieralgorithmus scheint in Ordnung zu sein, zumindest sehe ich gerade keine groben Fehler. Aber willst du wirklich BubbleSort verwenden?

Hoffe, dass ich helfen konnte...

Grüße
artifexumbrarum likes this.
Scutus ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 05.05.11, 18:14   #3 (permalink)
Themenstarter
 
Registriert seit: 22.03.11
artifexumbrarum Leistung: Facit NTK
Likes: 0
Standard

Danke! Auf die Idee mit der ASCII-Tabelle bin ich leider nicht gekommen^^"
Was Bubblesort angeht: nein Das habe ich nur zu Übungszwecken geschrieben. Wir haben im Unterricht leider noch keine anderen Algorithmen behandelt, werden aber bald noch u.a. Quicksort besprechen.
artifexumbrarum ist offline   Mit Zitat antworten
Alt 05.05.11, 20:48   #4 (permalink)
 
Benutzerbild von mauralix
 
Registriert seit: 17.04.06
mauralix Leistung: 8086
Likes: 3
Standard

Normalerweise implementiert man eine Sortieralgorithmus allgeimein, der für jeden Datentyp funktioniert für den es eine compare-Funktion gibt. Dafür wurde z.B. in Java das Compareable-Interface eingeführt. So sieht ein allgemeiner Bubblesort in C aus: chm0815 Blog: A generic bubblesort in plain C
Tarantoga likes this.
mauralix ist offline   Mit Zitat antworten
Alt 07.05.11, 10:15   #5 (permalink)
Themenstarter
 
Registriert seit: 22.03.11
artifexumbrarum Leistung: Facit NTK
Likes: 0
Standard

Danke. Ich hab das ganze jetzt vorübergehend mit "sortContent[i].toInt() > sortContent[i+1].toInt()" gelöst.
artifexumbrarum ist offline   Mit Zitat antworten
Alt 08.05.11, 15:05   #6 (permalink)
 
Benutzerbild von mauralix
 
Registriert seit: 17.04.06
mauralix Leistung: 8086
Likes: 3
Standard

Zitat:
Zitat von artifexumbrarum Beitrag anzeigen
Danke. Ich hab das ganze jetzt vorübergehend mit "sortContent[i].toInt() > sortContent[i+1].toInt()" gelöst.
Das funktioniert dann halt nur bei numerischen Strings wie "123", nicht aber bei "abc".
mauralix ist offline   Mit Zitat antworten
Alt 08.05.11, 18:24   #7 (permalink)
 
Registriert seit: 08.05.11
purple Leistung: Facit NTK
Likes: 0
Standard

ich finde es eingerückt schöner und übersichtlicher:
   
Code:
package bubblesort;0.2 (05/05/11)
*
*/
public class SortString
{
    private int elements;
    private String[] sortContent;

    //Constructor
    public SortString(int pElements, String[] pSortContent)
    {
        elements = pElements;
        sortContent = new String[elements];
        for(int i=0; i < elements; i++)
        {
            sortContent[i] = pSortContent[i];
        }
        sortString();
    }

    //Sortieralgorithmus
    private void sortString()
    {
        String temp;
        boolean changed = true;
        while(changed == true)
        {
            changed = false;
            for(int i=0; i<elements; i++)
            {
                if(getOrder(sortContent[i], sortContent[i++]) == true)
                {
                    temp = sortContent[i];
                    sortContent[i] = sortContent[i++];
                    sortContent[i++] = temp;
                    changed = true;
                }
            }
        }
    }

    private boolean getOrder(String pCurrentItem, String pNextItem)
    {
        if(defineOrder(pCurrentItem, 1, 1)>defineOrder(pNextItem, 1, 1))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    private double defineOrder(String pItem, double pGrade, int pIndex)
    {
        double result = 0;
        if(pItem.charAt(pIndex)=='A' || pItem.charAt(pIndex)=='a')
        {
            result = result+(1/pGrade);
            defineOrder(pItem, pGrade*10, pIndex++);
        }
        else if(pItem.charAt(pIndex)=='B' || pItem.charAt(pIndex)=='B')
        {
            result = result+(2/pGrade);
            defineOrder(pItem, pGrade*10, pIndex++);
        }

        //und so weiter

        else if(pItem.charAt(pIndex)=='Z' || pItem.charAt(pIndex)=='z')
        {
            result = result+(26/pGrade);
            defineOrder(pItem, pGrade*10, pIndex++);
        }
        //edit v0.2
        else if(pItem.charAt(pIndex)=='Ä' || pItem.charAt(pIndex)=='ä')
        {
            result = result+(1.5/pGrade);
            defineOrder(pItem, pGrade*10, pIndex++);
        }
        else if(pItem.charAt(pIndex)=='Ö' || pItem.charAt(pIndex)=='ö')
        {
            result = result+(15.5/pGrade);
            defineOrder(pItem, pGrade*10, pIndex++);
        }
        else if(pItem.charAt(pIndex)=='Ü' || pItem.charAt(pIndex)=='ü')
        {
            result = result+(21.5/pGrade);
            defineOrder(pItem, pGrade*10, pIndex++);
        }
        return result;
    }
}
purple ist offline   Mit Zitat antworten
Antwort

Stichworte
bubblesort, string
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Bubblesort Algorithmus für Strings
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61