другой TreeSort
От: uniqSnk  
Дата: 23.05.05 13:41
Оценка:
я надеюсь что это не плагиат, потому что этот алгоритм я придумал сам (из-за того что я сначала не правильно понял оригинальный TreeSort)
эта сортировка обгоняет QuickSort при выриантах значений меньше чем 5000... при 5000 скорости сравниваются
конечно сортировка черпаками быстрее но просто кому нить будет интересно
и так, вот алгоритм (написан на C#)
class sealed Sort
{
    private Sort(){}
    public static void TreeSort(int[] a)
        {
            if (a.Length<2)
                return;
            Node root=new Node(a[0]);
            for(int i=1; i<a.Length; i++)
                AddNode(root,a[i]);
            int k=0;
            ComputeNode(root,a,ref k);
        }
        private static void ComputeNode(Node nd, int[] a, ref int k)
        {
            if (nd.min!=null)
                ComputeNode(nd.min,a,ref k);
            for(int i=0; i<nd.cnt; i++)
                a[k++]=nd.val;
            if(nd.max!=null)
                ComputeNode(nd.max,a,ref k);
        }
        private static void AddNode(Node nd, int value)
        {
            if (nd.val>value)
                if (nd.min==null)
                    nd.min=new Node(value);
                else
                    AddNode(nd.min,value);
            else if (nd.val==value)
                nd.cnt++;
            else
                if (nd.max==null)
                    nd.max=new Node(value);
                else
                    AddNode(nd.max,value);
        }
        class Node
        {
            public int val, cnt=1;
            public Node min, max;
            public Node(int value)
            {
                val=value;
            }
        }

}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.