StringBufferInputStream

UPDATE: siehe auch den neuen Post StrinInputStream StringOutputStream der einige Schwächen dieser Lösung hier beseitigt.

Da programmiert man vor sich hin und vor sich hin, man will ein Java Objekt, oder besser gesagt ein Bean in ein XML-Format bringen (bzw. serialisieren).

Es gibt ja diese wunderbare Library die auch Java RMI verwendet, aber leider kann die nur in Streams schreiben, bzw. von Streams lesen.

Will man aber das XML (warum auch immer) als String haben, kann man den Umweg über ein File gehen – das ist eher doof – oder sich einen StringBuffer-Stream schreiben.

Hört sich vielleicht ein wenig kompliziert an, aber eigentlich sind die Java Streams recht einfache Konstrukte.

Da wäre diese zwei Streamchen zu erwähnen:

Will man nun eigene Streams schreiben, implementiert man einfach seine eigene Java Klasse die von dem jeweiligen Stream erbt.

So sieht dann mein StringBufferInputStream aus:

Read more

Quick Sort

Und weiter mit den Sortierübungen, jetzt der Quicksort in C

 
#include 

void quick_sort(int *liste, int links, int rechts);
void output(int *liste, int start, int ende);

int main(int argc, char* argv[])
{
	
	int a[] = {15, 9, 12, 1, 6, 13, 3, 4, 7, 10, 8, 11, 2, 5, 14, 16};

	printf("+Start:n");
	quick_sort(a,0,15);
	printf("+Ende:n");
	output(a,0,15);


	return 0;
}
void output(int *liste, int start, int ende)
{
	int i=0;

	for(i=start; i<=ende; i++)
	{
		printf("[%2d] ",liste[i]);
	}
	printf("n");
}


void quick_sort(int *liste, int in_links, int in_rechts)
{
	int links=in_links;
	int rechts=in_rechts;
	int mitte=liste[(links+rechts)/2];
	int temp=0;
	printf("+QSort: Von %d bis %d - Teile bei [%2d]:n  ",links,rechts, mitte);
	output(liste,links,rechts);
	do
	{
		while (liste[links] < mitte) links++;
		while (liste[rechts] > mitte) rechts--;
		if (links <= rechts)
		{
			printf("  Tausche [%2d] <--> [%2d]n  ", liste[links], liste[rechts]);
			temp = liste[links];
			liste[links] = liste[rechts];
			liste[rechts] = temp;
			output(liste,in_links,in_rechts);
			links++;
			rechts--;
		}
	} while (links <= rechts);
	if (rechts > in_links) quick_sort(liste, in_links, rechts);
	if (links < in_rechts) quick_sort(liste, links, in_rechts);
}

Bubble Sort

Eine einfache Implementierung des Bubble Sort Algorithmus in C

#include 
#define MAX 8

void bubble_sort(int *liste);
void output(int *liste);

int main(int argc, char* argv[])
{
	
	int a[] = {15, 9, 12, 1, 6, 13, 3, 4};

	output(a);
	bubble_sort(a);

	return 0;
}
void output(int *liste)
{
	int i=0;

	for(i=0; i=i; j--)
		{
			if (liste[j-1] > liste[j])
			{
				printf(" Tausche: [%2d] > [%2d] \n",liste[j-1],liste[j]); 
				x = liste[j-1];
				liste[j-1] = liste[j];
				liste[j] = x;
				printf(" "); 
				output(liste);
			}
			else
			{
				//printf(" Vergleich: [%2d] < [%2d] \n",liste[j-1],liste[j]);
			}
		}

	}

}
 

Selection Sort

Die Implementierung von Selection Sort in C

 
#include 
#define MAX 8

void selection_sort(int *liste);
void output(int *liste);

int main(int argc, char* argv[])
{
	
	int a[] = {15, 9, 12, 1, 6, 13, 3, 4};

	output(a);
	selection_sort(a);

	return 0;
}
void output(int *liste)
{
	int i=0;

	for(i=0; i> Tausche  [%d] mit  [%d] n",liste[i],x);
		liste[k] = liste[i];
		liste[i] = x;
		output(liste);
	}

}

Insertion Sort

Eine sehr einfache Implementierung eines Insertion Sorts in C

 
#include 
#define MAX 8

void insertion_sort(int *liste);
void output(int *liste);

int main(int argc, char* argv[])
{
	
	int a[] = {15, 9, 12, 1, 6, 13, 3, 4};

	output(a);
	insertion_sort(a);

	return 0;
}
void output(int *liste)
{
	int i=0;

	for(i=0; i= 0 && x < liste[j])
		{
			printf(" Vergleich: [%2d] < [%2d] n",x,liste[j]); 
			liste[j+1] = liste[j];
			//printf("   +> "); 
			//output(liste);
			j--;
		}
		
		liste[j+1] = x;
		printf(" Aufbau:    "); 
		output(liste);
	}

}