zoukankan      html  css  js  c++  java
  • 堆排序(Heapsort)

       class Program
        {
            static void Main(string[] args)
            {
    
                int[] arr = { 4, 10, 3, 5, 1, 2,16};
                int size = arr.Length;
                Heapsort(arr, size);
                foreach (int item in arr)
                {
                    Console.WriteLine(item);
                }
                Console.ReadKey();
                  
            }
    
            public static void swap(int[] arr, int i, int j)
            {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
            public static void Heapsort(int[] tree, int n)
            {
                build_heap(tree, n);
                int i;
                for (i = n - 1; i >= 0; i--)
                {
                    swap(tree, i, 0);
                    heapify(tree, i, 0);
                }
            }
            public static void build_heap(int[] tree, int n)
            {
                int last_node = n - 1;
                int parent = (last_node - 1)/2;
                int i;
                for (i = parent; i >= 0; i--)
                {
                    heapify(tree, n, i);
                }
            }
            public static void heapify(int[] tree,int n,int i)        
            {
                if (i >= n) {
                    return;
                }
                int c1 = 2 * i + 1;
                int c2 = 2 * i + 2;
                int max = i;//假设max是最大数值
                //假设c1和c2不存在不需要往下判断
                if (c1 < n && tree[c1] > tree[max])
                {
                    max = c1;
                }
                if (c2 < n && tree[c2] > tree[max])
                {
                    max = c2;
                }
                if (max != i)  //需要做交换
                {
                    swap(tree, max, i);
                    heapify(tree, n, max);
                }
    
            }
    
    
    
                    /*
              * parent=(i-1)/2
              *  c1=  2i+1
              *  c2=  2i+2
              */
    
        }
  • 相关阅读:
    [leetcode]Remove Nth Node From End of List
    [leetcode]Palindrome Number
    [leetcode]Integer to Roman
    HDU 4709:Herding
    HDU 4708:Rotation Lock Puzzle
    HDU 4707:Pet
    HDU 4706:Children's Day
    SDUT 2411:Pixel density
    SDUT 2413:n a^o7 !
    SDUT 2409:The Best Seat in ACM Contest
  • 原文地址:https://www.cnblogs.com/tianranhui/p/10637121.html
Copyright © 2011-2022 走看看