Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Mein Quicksort funktioniert nicht - Bitte um Hilfe bei der Fehlersuche

Mitglied: Leopold.Bloom

Leopold.Bloom (Level 1) - Jetzt verbinden

29.08.2012 um 02:22 Uhr, 2298 Aufrufe, 1 Kommentar

Hallo liebe Leute,

ich will mich gar nicht darüber streiten ob selbstgestrickte Arrays in Batches Sinn machen oder nicht. Letztlich ist es in anderen Programmiersprachen auch nicht anders. Es ist reservierter Speicher, dem ich Namen gebe. Sonst nichts. Eine lib stellt die Arrayfunktionen zur Verfügung. Bei mir inzwischen auch. Ich finde es praktisch, weil für mein Gefühl der Code aufgeräumter aussieht. Und es ist für mich einfacher, es vielleicht auch in eine andere Programmiersprache zu portieren oder Progs aus anderen Programmiersprachen als Batch zu realisieren. Egal. Darum geht es mir jetzt nicht.

Ich habe einen Pseudocode Quicksort umgesetzt und er funktioniert nicht. Ich finde den Fehler nicht. Vielleicht kann mir jemand auf die Sprünge helfen. Mein Bubblesort funktioniert einwandfrei. In beide Richtungen. Es liegt also nicht an den Arrayfunktionen. Kann Quicksort eigentlich auch absteigend sortieren? So ganz klar ist mir der Algorithmus noch nicht. Das Prinzip schon. Aber irgendwas fehlt mir noch.

01.
 
02.
:qsort 
03.
 
04.
Rem Ein Arrey wird übergeben und 2 Indizes 
05.
     
06.
	SET QUICK.ARRAY=%1 
07.
	SET LOW.INDEX=%2 
08.
	SET HIGH.INDEX=%3 
09.
 
10.
	SET /a i=%LOW.INDEX%  
11.
	SET /a j=%HIGH.INDEX% 
12.
 
13.
Rem Arraymitte errechnen 
14.
 
15.
	SET /a HELP=%LOW.INDEX%+%HIGH.INDEX% 
16.
	SET /a P=%HELP%/2 
17.
 
18.
Rem das PIVOT Element wird festgelegt. Mitte Array 
19.
  
20.
	setlocal enabledelayedexpansion 
21.
	   call lib getval %QUICK.ARRAY% %P% PIVOT 
22.
	endlocal & SET PIVOT=%PIVOT% 
23.
 
24.
Rem das Tauschelement von links wird gesucht 
25.
 
26.
	:LINKS_NEXT 
27.
	setlocal enabledelayedexpansion 
28.
		call lib getval %QUICK.ARRAY% %i% WERT_LINKS 
29.
	endlocal & SET WERT_LINKS=%WERT_LINKS%	 
30.
	IF %WERT_LINKS% LSS %PIVOT% ( 
31.
		set /a i+=1 
32.
		goto LINKS_NEXT 
33.
	)  
34.
 
35.
Rem das Tauschelement von rechts wird gesucht 
36.
 
37.
	:RECHTS_NEXT 
38.
	setlocal enabledelayedexpansion 
39.
		call lib getval %QUICK.ARRAY% %j% WERT_RECHTS 
40.
	endlocal & SET WERT_RECHTS=%WERT_RECHTS% 
41.
	IF %WERT_RECHTS% GTR %PIVOT% ( 
42.
		set /a j-=1 
43.
		goto RECHTS_NEXT 
44.
45.
 
46.
Rem solange der Index von links kleinergleich Index von rechts 
47.
Rem werden die Elemente getauscht 
48.
  
49.
	IF %i% LEQ %j% ( 
50.
		setlocal enabledelayedexpansion 
51.
		call lib getval !QUICK.ARRAY! %i% Z1 
52.
		call lib getval %QUICK.ARRAY% %j% Z2 
53.
		 
54.
Rem Ausgabe zu Kontrollzwecken 
55.
 
56.
		echo vorher 
57.
		ECHO %QUICK.ARRAY%[%i%]=!Z1! 
58.
		ECHO %QUICK.ARRAY%[%j%]=!Z2! 
59.
 
60.
Rem die Elemente werden getauscht 
61.
		 
62.
		SET %QUICK.ARRAY%[%i%]=!Z2! 
63.
		SET %QUICK.ARRAY%[%j%]=!Z1! 
64.
				 
65.
Rem Ausgabe zu Kontrollzwecken 
66.
 
67.
                call lib getval !QUICK.ARRAY! %i% Z1 
68.
		call lib getval %QUICK.ARRAY% %j% Z2  
69.
		 
70.
		ECHO nachher 
71.
		ECHO %QUICK.ARRAY%[%i%]=!Z1! 
72.
		ECHO %QUICK.ARRAY%[%j%]=!Z2! 
73.
 
74.
 
75.
Rem Ausgabe gesamtes Array um zu sehen ob der Tausch funktioniert   
76.
Rem hat		 
77.
		FOR /L %%l IN (0, 1, 8 ) Do ( 
78.
		call lib getval %QUICK.ARRAY% %%l Z0 
79.
		Echo !QUICK.ARRAY![%%l] !Z0! 
80.
81.
		PAUSE 			 
82.
		endlocal 
83.
 
84.
Rem die Indizes werden hoch bzw. runter gezählt 
85.
		 
86.
		set /a i+=1 
87.
		set /a j-=1 
88.
89.
 
90.
Rem falls der linke Index am rechten vorbei ist Abbruch	 
91.
	 
92.
if %i% gtr %j% goto WEITER 
93.
	goto :LINKS_NEXT 
94.
		 
95.
:WEITER 
96.
 
97.
Rem Die Rekursion 
98.
 
99.
IF %LOW.INDEX% LSS %j% call :qsort %QUICK.ARRAY% %LOW.INDEX% %j% 
100.
IF %i% LSS %HIGH.INDEX% call :qsort %j% %QUICK.ARRAY% %HIGH.INDEX%  
101.
 
102.
Rem Zum Schluss Ausgabe des sortierten Arrays auf dem Bildschirm 
103.
 
104.
setlocal enabledelayedexpansion 
105.
FOR /L %%l IN (0, 1, 8 ) Do ( 
106.
	call lib getval %QUICK.ARRAY% %%l Z0 
107.
	Echo !QUICK.ARRAY![%%l] !Z0! 
108.
109.
endlocal	 
110.
 
111.
ECHO FERTIG	 
112.
goto :eof 
113.
 
Irgendwas fehlt mir - aber was? Das Pivotelement wird richtig gesetzt, die ersten Tauschaktionen laufen richtig. Aber dann wird nicht weitersortiert. Die Gotos habe ich eingebaut, nachdem ich verzweifelt versucht habe eine Endlosschleife zu konstruieren.

01.
set /a j=0 
02.
for /L %%i in (0) do if not defined done ( 
03.
    set j+=1  
04.
    echo Hallo %j%  
05.
  if %j%==10 set done=break 
06.
)
geht nicht. der Job bleibt bei meinem CMD stehen. Bei


01.
 for /L %%i in (0,0,0) do if not defined done ( 

auch. Das hier geht auch nicht

01.
 
02.
set /a j=0 
03.
set /a x=1 
04.
for /L %%i in (0,1,%x%) do if not defined done ( 
05.
    set j+=1 
06.
    set x+=1   
07.
    echo Hallo %j%  
08.
  if %j%==10 set done=break 
09.
)
Ich habe hier gelegentlich auch

01.
 for /L %i in (0,1,%x%) do 
gesehen. Da bekomme ich auch eine Fehlermeldung. Die Zählvariable muss zwei Prozentzeichen haben und ich kann ihr auch keinen Wert zuweisen.

Also doch zwei Fragen.

1. Was ist bei meinem qsort falsch?
2. Gibt es eine andere Möglichkeit, eine Endlosschleife zu bauen?

Vielen Dank für Euer Interesse

LG

Leo





Mitglied: jeb-the-batcher
29.08.2012 um 15:26 Uhr
Hallo Leo,

dann möchte ich mich mal über Endlosschleifen auslassen.
Wie der Name schon sagt sind diese endlos, und Batch nimmt es hier sehr genau mit dem Endlos.
Mit einem goto oder exit /b kann zwar das weitere Ausführen der Scheife beendet werden, aber nicht die Schleife selbst!

Siehe ein kleines Beispiel
01.
@echo off 
02.
setlocal EnableDelayedExpansion 
03.
set /a cnt=0 
04.
for /L %%n in (0) DO ( 
05.
  set /a cnt+=1 
06.
  echo !cnt! 
07.
  if !cnt!==5 goto :myExit 
08.
09.
:myExit
Wie wir sehen werden die Zahlen von 1 bis 5 ausgegeben, aber danach hängt die Batch.
Interessant wird es wenn man ECHO ON zu beginn schaltet, dann sieht man das der Abbruch leider die Schleife nicht abbricht, sie wird weiter aufgelöst aber nicht mehr ausgeführt.
Dies gilt übrigens nur für FOR /L, bei den anderen FOR Schleifen ist ein vorzeitiger Abbruch möglich.

Allerdings soll nicht verschwiegen werden, es ist auch mit FOR /L möglich, man braucht nur mit EXIT die Schleife zu beenden.
Dadruch sind aber etwas komplexere Konstrukte notwendig, wenn man danach noch weiterarbeiten möchte.
Dazu gibt es einen schönen Thread auf Dostips.com The ultimate while loop

Zu deiner ersten Frage: Was ist bei meinem qsort falsch?
Ja, das wüsste ich auch gerne, aber da wird wohl noch jemand eine gute Lösung finden ...

Gruß
jeb
Bitte warten ..
Ähnliche Inhalte
Router & Routing
Bitte um Hilfe bei der Fehlersuche
Frage von moma72Router & Routing1 Kommentar

Hallo, ich habe versucht eine Fritzbox 7390 (192.168.0.1) , eine DLAN-Verbindung sowie eine TP-Link WR703N mit dd-WRT als Access ...

Netzwerkgrundlagen
Fehlersuche Netzwerk
gelöst Frage von NoobLevel10Netzwerkgrundlagen12 Kommentare

Hallo Administrator-Community, wenn ich eine IP-Adresse im Firmen-Netzwerk nicht erreichen kann, wie gehe ich am Besten bei der Fehlersuche ...

CMS

Fehlersuche nach Installation Magentomodul

Frage von sbsnewbieCMS1 Kommentar

Hallo Leude, wisst Ihr ob es eine Möglichkeit gibt Magento irgendwie "zu monitoren"? Ich bin gerade auf Fehlersuche nach ...

Windows Tools

Suche Tool für Fehlersuche

gelöst Frage von honeybeeWindows Tools6 Kommentare

Hallo, ein Terminalserver mit installiertem Windows Server 2008 R2 ist momentan echt träge. Ich habe keine Chance, mir die ...

Neue Wissensbeiträge
Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 1 StundeHumor (lol)

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 14 StundenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Sicherheit

Intel gibt neue Spectre V2-Microcode-Updates frei (20.02.2018)

Information von kgborn vor 14 StundenSicherheit

Intel hat zum 20. Februar 2018 weitere Microcode-Updates für OEMs freigegeben, um Systeme mit neueren Prozessoren gegen die Spectre ...

Microsoft
ARD-Doku - Das Microsoft Dilemma
Tipp von Knorkator vor 17 StundenMicrosoft3 Kommentare

Hallo zusammen, vor einigen Tagen lief in der ARD u.a. Reportage. Das Youtube Video dazu dürfte länger verfügbar sein. ...

Heiß diskutierte Inhalte
Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server40 Kommentare

Guten Tag, ich habe bei einem Kunden ein Problem mit den AD DS. Umgebung ist folgende: Windows Server 2016 ...

Router & Routing
LANCOM VPN CLIENT einrichten
Frage von Finchen961988Router & Routing27 Kommentare

Hallo, ich habe ein Problem und hoffe ihr könnt mir helfen, wir haben einen Kunden der hat einen Speedport ...

Router & Routing
ISC DHCP 2 Subnetze
gelöst Frage von janosch12Router & Routing19 Kommentare

Hallo, ich betreibe bei mir im Netzwerk einen ISC DHCP Server auf Debian, der DHCP verwaltet aktuell ein /24 ...

Switche und Hubs
Cisco SG350X-48 AdminIP in anderes VLAN
Frage von lcer00Switche und Hubs14 Kommentare

Hallo zusammen, ich habe ein Problem mir einem Cisco SG350X-48 bei der Erstinstallation wurde eine IP 192.168.0.254 (Default VLAN ...