Die Klasse MergeSorter – ganz nett zum effizienten Sortieren

Heute hab ich mal eine Implementierung des sehr gut funktionierenden MergeSort Algorithmus, mit dem man sehr gut sortieren kann, vor allem recht performant.

In diesem Beispiel wird ein char[] Array an die Sorter Klasse übergeben und der Größe nach sortiert.

class MergeSorter
{
	private char[] a, b;
	private int n;
	
	public void sort(char[] a)
	{
		this.a	= a;
		this.n	= a.length;
		this.b	= new char[((n+1)/2)];
		mergeSort(0, n-1);
	}
	private void mergeSort(int left, int right)
	{
		if(left < right)
		{
			int mid		= (right+left)/2;
			mergeSort(left, mid);
			mergeSort(mid+1, right);
			merge(left, mid, right);
		}
	}
	private void merge(int left, int mid, int right)
	{
		int i, j, k;
		
		i = 0; 
		j = left;
		while(j <= mid)
		{
			b[i++] = a[j++];
		}
			
		i = 0; 
		k = left;
		while(k < j && j <= right)
		{
			if(b[i] < a[j])
				a[k++] = b[i++];
			else
				a[k++] = a[j++];
		
		}
		while(k < j)
			a[k++] = b[i++];
		
	}
	
}
public class CharSorterDemo {

	public static final void main(String[] args)
	{
		char[] a = {'M','E','R','G','E','S','O','R','T','E','R'};
		MergeSorter charSorter = new MergeSorter();
		charSorter.sort(a);
		
		for(char s : a)
			System.out.print(s + " ");
	}
	
}