--heap sort . O(n*logn).  auxiliary space O(1).  Unstable sorting.

 class ArraySort
    {
        static void Main(string[] args)
        {
            //give up 0 index. get/set from 1 so that getting right index when do j=2*i.
            int[] a = new int[11] {0,5,77,1,61,11,59,15,48,47,25 };


            ArraySort arrs = new ArraySort();
            arrs.HeapSort(a,a.Length-1);

            for (int i = 1; i < a.Length; i++)
            {
                Console.Write(a[i]);
                Console.Write(",");
            }

            Console.Read();
        }


        void HeapSort(int[] K, int n)
        {
            int i, temp;
            for (i  = n/2; i >=1; i--)
            {
                Adjust(K, i, n);
            }
            for (i = n-1; i >=1; i--)
            {
                temp = K[i + 1];
                K[i + 1] = K[1];
                K[1] = temp;
                Adjust(K, 1, i);
            }
        }

        void Adjust(int[] K, int i, int n)
        {
            int j = 0;
            int temp = K[i];
            j = 2 * i;
            while (j<=n)
            {
                //get max child.
                if (j<n&&K[j]<K[j+1])
                {
                    j++;
                }
                if (temp >=K[j])
                {
                    break;
                }
                K[j / 2] = K[j];
                j = 2 * j;
            }
            K[j / 2] = temp;
        }
    }

  

 

posted on 2013-06-16 17:43  Alan Yang  阅读(177)  评论(0编辑  收藏  举报